Hi, nach langer Abwesenheit habe ich endlich wieder den Weg hier her gefunden. Ich habe mir mit PyQt ein kleines Script gebastelt, das einen Drucker auswählt, breite, höhe und Margins der Seite einstellt und dann den Druckerdialog öffnet.
Wenn ich mir dann im Dialog die Zahlen anschaue stimmen die vorne und hinten nicht. Ich gebe eine Breite von 57mm an (Label Drucker) und im Dialog stehen über 1000mm. Bei den anderen Zahlen ist es ähnlich. Der Ausdruck funktioniert dann aber problemlos. Der Bug scheint erst mit Qt4.5 aufzutreten, unter Qt4.4 soll das alles funktioniert haben
Hier ein Screenshot wie das dann aussieht
Außerdem ignoriert er die Angabe, wie viele Seiten gedruckt werden sollen. Er druckt immer nur eine Seite aus.
Jetzt ist die Frage, ob es ähnliche Probleme auch unter C++ gibt. Ich bin erst am lernen und konnte es noch nicht testen
Ich verwende hier Xubuntu Jaunty mit Qt5.4 und Python 2.6. Auf der Trolltech Seite habe ich irgendwo gelesen, das es wohl unter unixoiden Systemen irgendwelche Probleme mit setNumCopies() zu geben scheint.
Bug im Qt4.5 Druckdialog?
Hi,
Laut Trolltech ist der Bug in der Version 4.5 gefixt.
Man könnte es ja mit C++ umsetzen, um zu gucken ob es an PyQt liegt.
https://www.qtsoftware.com/developer/ta ... &id=230372
Laut Trolltech ist der Bug in der Version 4.5 gefixt.
Man könnte es ja mit C++ umsetzen, um zu gucken ob es an PyQt liegt.
https://www.qtsoftware.com/developer/ta ... &id=230372
Ja, das hab ich auch gefunden. Deshalb hab ich keinen neuen Bug Report auf gemacht.Xairo hat geschrieben:Laut Trolltech ist der Bug in der Version 4.5 gefixt.
Ja, wie gesagt, C++ lerne ich gerade. Bzw ich lerne, wie Qt und C++ zusammengehören. Vielleicht schaff ich es dieses Wochenende, ein Equivalent in C++ zu schreibenXairo hat geschrieben:Man könnte es ja mit C++ umsetzen, um zu gucken ob es an PyQt liegt.
Scheint wohl doch an den PyQt Bindings zu liegen. Zumindest kommen die korrekten Margins im Dialog an und in Properties/Advanced wird, im Gegensatz zu PyQt, etwas angezeigt.
Was nicht funktioniert ist setPaperSize. Vielleicht habe ich etwas falsch verstanden
Was auch nicht funktioniert ist printer.setNumCopies(). Ich kann da zwar 10 Stück anzeigen und die erscheinen auch im Druckerdialog, aber trotzdem druckt er nur ein Exemplar.
Ich muss aber auch gestehen, das ich noch kein C++ Experte bin. Ich weiß zb nie, ob ich jetzt einfach QPrinter printer; verwenden kann oder QPrinter *printer = new .... verwenden muss.
In der Doku zu QPrintDialog steht zb
Ich musste aber
schreiben, damit es funktioniert. Kann mir jemand mal eine gute Seite mit einem C++ Tutorial nennen, das sowas näher erläutert? Oder vielleicht kurz in 1-2 Sätzen mal erklären? Ich hab mir zwar den C++ Primer bestellt, aber der Laden hat die Bestellung verbummelt und deshalb ging das Buch erst Donnerstag raus. Dabei wollte ich über Ostern lesen.
Mit viel Glück kommt es heute
EDIT: Ich habe gerade festgestellt, das QPrintDialog printDialog(&printer, parent); funktioniert. Ist das jetzt ein Fehler in der Qt Doku?
Was nicht funktioniert ist setPaperSize. Vielleicht habe ich etwas falsch verstanden
Code: Alles auswählen
printer.setPaperSize(QSizeF(32.0, 57.0), QPrinter::Millimeter);Ich muss aber auch gestehen, das ich noch kein C++ Experte bin. Ich weiß zb nie, ob ich jetzt einfach QPrinter printer; verwenden kann oder QPrinter *printer = new .... verwenden muss.
In der Doku zu QPrintDialog steht zb
Code: Alles auswählen
[i]QPrintDialog printDialog(printer, parent);[/i]Code: Alles auswählen
QPrintDialog *dlg = new QPrintDialog(&printer, this);EDIT: Ich habe gerade festgestellt, das QPrintDialog printDialog(&printer, parent); funktioniert. Ist das jetzt ein Fehler in der Qt Doku?
Wäre schade, wenn es wirklich an PyQt liegt. Aber mit C++ scheint es wohl nicht viel besser zu sein. 
Vielleicht nochmal die Python Version auf einem anderen Rechner ausprobieren.
Nein, das Ganze ist kein Fehler.
1.
Oder
2.
Beides ist korrekt.
QPrintDialog will als erstes Argument die Adresse vom QPrinter wissen. Bei Version 1 muss ein & hin, da du QPrinter nicht als Zeiger angelegt hast. Bei Version 2 braucht man das & nicht, da liegt QPrinter als Zeiger vor, und printer liefert dir auch direkt seine Adresse.
& (address of) - gibt dir die Adresse einer Variable zurück.
Naja, aber das muss man üben.
http://www.hs-augsburg.de/~sandman/c_vo ... #Xxx999328
Der Unterschied ist, alles was du mit new erzeugst musst du mit delete auch löschen.
Beim anderen (QPrinter printer), das ist auf seine Lokalität beschränkt und nach Ende des Blocks automatisch gelöscht.
MfG
Xairo
Vielleicht nochmal die Python Version auf einem anderen Rechner ausprobieren.
Nein, das Ganze ist kein Fehler.
1.
Code: Alles auswählen
QPrinter printer;
QPrintDialog printDialog(&printer, parent);
2.
Code: Alles auswählen
QPrinter* printer = new QPrinter();
QPrintDialog printDialog(printer, parent);
Code: Alles auswählen
QPrintDialog ( QPrinter * printer, QWidget * parent = 0 )
& (address of) - gibt dir die Adresse einer Variable zurück.
Naja, aber das muss man üben.
http://www.hs-augsburg.de/~sandman/c_vo ... #Xxx999328
Der Unterschied ist, alles was du mit new erzeugst musst du mit delete auch löschen.
Beim anderen (QPrinter printer), das ist auf seine Lokalität beschränkt und nach Ende des Blocks automatisch gelöscht.
MfG
Xairo
Es ist zumindest verwirrent weil an der einen Stelle eine Variable von QPrinter erzeugt wird und an anderer Stelle QPrintDialog ebenfalls als Variable erzeugt wird, aber printer ohne den & Operator verwendet.Xairo hat geschrieben:Nein, das Ganze ist kein Fehler.
So langsam blicke ich aber durch und beiße mich Stück für Stück weiter. Außerdem sind eben zwei Bücher gekommen. C++ Primer und C++ GUI Programmierung mit Qt4. Jetzt hilft nur noch lesen und ausprobieren ausprobieren ausprobieren