Seite 1 von 1

[gelöst] QPrinter !isActive Bug?

Verfasst: 19. Oktober 2005 22:47
von Volker
Hallo,

ich wollte gerade etwas ausdrucken mittels folgendem Code:

Code: Alles auswählen

QPrinter* printer = new QPrinter(QPrinter::HighResolution);	
QPrintDialog* setupDialog = new QPrintDialog(printer, this);
if (setupDialog->exec()) 
{
	double heightRatio = static_cast<double>(printer->height())/ static_cast<double>(printer->heightMM());
	double widthRatio  = static_cast<double>(printer->width()) / static_cast<double>(printer->widthMM());
        ... draw methoden...
}
Dummerweise liefert aber printer->height() und heightMM() genauso wie das ganze für widthMM immer 0 zurück, da intern in QWin32PrintEngine das active Flag auf FALSE steht. Die Frage ist nun wieso steht das auf FALSE? Das passiert sowohl bei PDF Druckertreibern ebenso wie bei real existierenden Druckern.

Ich meinte eigentlich mit dem selben Code schon mal gedruckt zu haben,... allerdings hatte ich da noch QT 4.0 installiert, mittlerweile ist es QT4.0.1.

Rufe ich printer->printerState() auf, kommt Idle als State zurück. Was ja eigentlich auch sinnvoll ist meiner Meinung nach, denn ich hab ja noch nicht angefangen zu drucken, das passiert ja erst wenn das printer Objekt zerstört wird oder liege ich da falsch?

Hat vielleicht jemand ähnliche Probleme mit Qt 4.0.1?

Verfasst: 20. Oktober 2005 08:58
von FlorianBecker
Ich weiß nicht wie ähnlich die sind, aber in Qt4 hatte ich Zeilenmarkierungen einwandfrei, wenn eine Spalte ausgeblendet wurde. Unter 4.0.1 geht das nicht mehr, obwohl dort ein BUG gefixt werden sollte.

Ist durchaus möglich. Probiere doch mal einen Snapshot, wenn du hart drauf bist. Denn dort sind unter Umständen noch einige Fehler mehr enthalten.

Ansonsten kommt ja Qt4.1 bald, damit sollte es dann nun endlich mal gehen wieder zu arbeiten.

Tatsächlich

Verfasst: 20. Oktober 2005 10:12
von Volker
Ich hab das ganze nun einfach nochmal mit Qt 4.0 ausprobiert und tatsächlich funktioniert es da noch.
Allerdings funktioniert zum Beispiel die Funktion "newPage()" in beiden Versionen nicht, da beide ein Q_ASSERT(isActive) enthalten, was aber hier nicht zutrifft.

Als ich mal in den Source Code von QWin32PrintEngine geschaut habe, fällt auf, dass in der Qt 4.0 Version in der Funktion metric keine Abfrage enthalten ist, ob das active Flag auf true steht. So gesehen haben sie wohl aus irgend einem Grund das eingebaut,...

...gerade is mir eingefallen, das es vielleicht daran liegt, das man erst das QPainter Object auf den Drucker erstellen muss, bevor man die Abfragen machen kann. Und tatsächlich ist es so, dass wenn man vor dem Aufruf von height() bzw. den anderen Dimensionsfunktionen,

Code: Alles auswählen

QPainter p( printer );
aufruft, dann funktionierts auch in Qt 4.0.1 wieder