Wie bekomme ich Qt, um einen kompletten Dialog oder ein komplettes Fenster zu drucken? Ich könnte den Fensterinhalt mit einem externen Programm wie xwd
ausgeben und das drucken, aber ich würde es vorziehen, alles mit Qt zu machen.Wie drucke ich einen Qt-Dialog oder ein Qt-Fenster?
4
A
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();
pix.grabWidget (myMainWindowWidget) scheitert für mich. Ich muss verwenden: QPixmap pix = QPixmap :: grabWidget (myMainWindowWidget); – PiedPiper
Ah ok, weil es eine statische Methode ist. Ich habe meine Antwort bearbeitet. –
QPixmap :: grabWidget war gut genug für das, was ich brauchte, aber Ariyas Lösung QWidget :: render() ist noch besser – PiedPiper