2009-03-25 4 views

Antwort

8

Während Sie grabWidget verwenden, um die pixmap Darstellung des Dialogs zu bekommen, im Wesentlichen Sie wird die Pixel der Pixmap drucken, dh der Dialog wird auf die Bildschirmauflösung gerastert und dann auf die Druckerauflösung skaliert. Dies kann zu einigen Artefakten führen oder auch nicht.

Eine andere Möglichkeit ist die Verwendung der Funktion QWidget::render(), die ein Farbgerät verwendet. Auf diese Weise können Sie Ihren Drucker als Farbgerät übergeben. Der Dialog wird nun mit der Druckerauflösung auf den Drucker "gezeichnet".

8

Verwenden Sie QPixmap::grabWidget (oder QPixmap::grabWindow für externes Fenster). Etwas wie folgt aus:

QPixmap pix = QPixmap::grabWidget(myMainWindowWidget); 

weiß nicht, ob Sie es wirklich zu einem Drucker drucken bedeuten, wenn ja:

QPrinter printer(QPrinter::HighResolution); 
QPainter painter; 
painter.begin(&printer);  
painter.drawPixmap (0, 0, &pix);  
painter.end(); 
+0

pix.grabWidget (myMainWindowWidget) scheitert für mich. Ich muss verwenden: QPixmap pix = QPixmap :: grabWidget (myMainWindowWidget); – PiedPiper

+0

Ah ok, weil es eine statische Methode ist. Ich habe meine Antwort bearbeitet. –

+0

QPixmap :: grabWidget war gut genug für das, was ich brauchte, aber Ariyas Lösung QWidget :: render() ist noch besser – PiedPiper