[gelöst] QPrinter !isActive Bug?

Alles rund um die Programmierung mit Qt
Antworten
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

[gelöst] QPrinter !isActive Bug?

Beitrag 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?
Zuletzt geändert von Volker am 20. Oktober 2005 10:13, insgesamt 1-mal geändert.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Tatsächlich

Beitrag 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
Antworten