Crash beim Versuch mit Qt zu drucken
-
Moin,
ich versuche mit Qt etwas auszudrucken unter Windows. Nur crasht das Programm unvermittelt in Zeile 17 beim painter. Ich habe im Moment keine Idee warum das so sein sollte. Vielleicht habt ihr eine.
Den default printer gibt es und der druckt auch von anderen Programmen aus, auch Qt Programmen(hab den creator probiert).QPrinter printer(QPrinterInfo::defaultPrinter()); QPageLayout layout( QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(0, 0, 0, 0), QPageLayout::Millimeter ); printer.setPageLayout(layout); printer.setPaperSource(QPrinter::Auto); if (!printer.isValid()) { qCritical() << "Error: Printer is not valid."; return 1; } QPainter painter; if (!painter.begin(&printer)) { qCritical() << "Error: Cannot start printer."; return 1; }
-
Du machst hier verschieden Fehler bzw. prüft sachen nicht korrekt (laut doku)
Laut https://doc.qt.io/qt-6/qprinter.html#details
Note that setting parameters like paper size and resolution on an invalid printer is undefined. You can use QPrinter::isValid() to verify this before changing any parameters.
laut https://doc.qt.io/qt-6/qprinterinfo.html#defaultPrinter
The return value should be checked using isNull() before being used, in case there is no default printer.
Bei deinem "test" hast du wohl die "File->Print" option von qt creator genutzt.
Welches intern sehr wahrscheinlich QPrintDialog nutzt um die QPrinter instanz zu erzeugen:
https://doc.qt.io/qt-6/qtprintsupport-index.html#creating-a-qprinterAnsonsten solltest du vieleicht solltest du erstmal versuchen in eine Datei zu "drucken":
https://doc.qt.io/qt-6/qtprintsupport-index.html#painting-onto-a-page
-
@firefly sagte in Crash beim Versuch mit Qt zu drucken:
Du machst hier verschieden Fehler bzw. prüft sachen nicht korrekt (laut doku)
Laut https://doc.qt.io/qt-6/qprinter.html#details
Note that setting parameters like paper size and resolution on an invalid printer is undefined. You can use QPrinter::isValid() to verify this before changing any parameters.
Der Drucker ist hier aber defined und auch valid.
laut https://doc.qt.io/qt-6/qprinterinfo.html#defaultPrinter
The return value should be checked using isNull() before being used, in case there is no default printer.
Den default printer gibt es.
Bei deinem "test" hast du wohl die "File->Print" option von qt creator genutzt.
Welches intern sehr wahrscheinlich QPrintDialog nutzt um die QPrinter instanz zu erzeugen:
https://doc.qt.io/qt-6/qtprintsupport-index.html#creating-a-qprinterNein ich instanziiere einfach einen QPrinter, da das tool keine GUI hat. Daher vermute ich, dass irgendwas nicht gesetzt ist was der Dialog normalerweise setzt.
Ansonsten solltest du vieleicht solltest du erstmal versuchen in eine Datei zu "drucken":
https://doc.qt.io/qt-6/qtprintsupport-index.html#painting-onto-a-pageDer PDF printer als Ziel funktioniert, nur mein physikalischer nicht.
-
@Tyrdal
Ist dein Standarddrucker ein Oki?
-
@Quiche-Lorraine Nein, HP Color LaserJet MFP M277dw. Verbunden über Wlan.
-
@Tyrdal
Unser Oki-Drucker-Treiber crasht nämlich ganz gerne, wenn die Papier-Quelle angeben möchte. Das ganze ist aber abhängig von dem jeweiligen Programm. Und leider warten wir bis heute auf ein Bugfix.
-
@Quiche-Lorraine Hab auch schon von Problemen mit HP gelesen.
Jetzt wirds aber seltsam: Hab denselben Code mal in eine Funktion innerhalb eines Gui Programms(nur leeres Mainwindow) gepackt. Und da druckt er. Naja muss ich im zweifel einfach den Dialog ausblenden.
-
Ich habs: Ich brache QApplication statt QCoreApplication.
-
@Tyrdal
Apropo Crash. Hast du mal eine Dump Datei anlegen lassen und diese analyiert?Es würde mich einfach mal interresieren wo der Fehler herkommt.
-
@Quiche-Lorraine Nein, hab ich nicht.