ich brauch hier mal wieder etwas Hilfe..
ich möchte eine QPixmap drucken. Auf Linux funktioniert das alles auch soweit ganz gut. Auf Windows steigt mir das Program bei printer->newPage(); aus - aber eben nur in windows... Hier mal der Code:
void Plotter::printExtended()
{ // used to print only this plot (via print button on the plot)
QPrintDialog printDialog(printer);
if (printDialog.exec() == QDialog::Accepted) {
print(printer);
}
}
void Plotter::print(QPrinter * extPrinter)
{ // used to print the plot to pdf (batch-print)
QPrinter *printer;
if (extPrinter == 0) {
printer = new QPrinter(QPrinter::PrinterResolution);
...
} else {
printer = extPrinter;
}// if
isPrint = true; // invert colors & change sizes.
// create pixmap -> printable data
printer->newPage();
...
Es liegt also wohl an den Pointern (?). Kann auch sein, dass es ein einfacher C-Fehler ist, den ich gerade nicht sehe.. Es könnte allerdings auch am PrinterDialog liegen..
wäre dankbar für jede Hilfe
nagut, wisst ihr nicht? könnt ihr mir sagen, auf welche weise ihr bilder/pixmaps scaled, sodass sie auf das papier passen? meine passen unter linux aber unter windows sind sie größer als das papier. hab schon einige sachen probiert, aber erziele kein einheitliches ergebnis..
sorry, verstehe nicht, was du meinst. kannst du es nochmal anders ausdrücken? extPrinter wird bei mir nicht gelöscht.
der initialwert von extPrinter ist 0 (void print(QPrinter * extPrinter = 0))
wenn ich also diese fkt. ohne den ext.printer-pointer aufrufe, wird ein neuer printer generiert, anderenfalls wird der printer-pointer auf ext.printer gesetzt.
Also ich würde mal sagen Du solltest dich mit mal mit den Grundlagen beschöftigen... ein Pointer den man mit new() erzeugt hat, sollte man normalerweise auch mit delete wieder freigeben. Sonst gibts memleaks...
Die Ausnahmen sind alle Klassen, die von QObject abgeleitet sind und denen Du ein parent übergibst.
Ja eben, alle Q_OBJECTS, die in einem anderen Q_OBJECT erzeugt werden, werden beim zerstören des in der Hierarchie höherliegenden ebenfalls zerstört. Soweit ich das jetzt verstanden habe. Dabei müssen diese auch nicht unbedingt den Parent übergeben bekommen - oder doch?
Wie sollen die Objekte ohne parent irgend eine Referenz untereinander aufbauen können?
Und wie sinnvoll ist es zig QPrinter zu erzeugen ohne sie wieder zu löschen? Da würde sich wohl eher eine member-Variable lohnen...
Ok, dann muss ich wohl meinen Code nochmal in der Hinsicht überarbeiten. Es wird stets nur ein QPrinter erzeugt. Der wird eben wiederverwendet, darum ja das ganze. Existiert ein Printer schon, wird dieser beim Funktionsaufruf übergeben. Als Member macht das keinen Sinn, da die Klasse nur je einen Plott beherbergt. Drucke ich als alle Plots, wird im Parent ein QPrinter erzeugt und für jeden Plot übergeben. Aber danke für deine Hilfe! Das mit dem Scalen habe ich auch hinbekommen, nachdem ich den Viewport (Größe) des Printer beim Zeichnen der Pixmap zugrunde gelegt habe und nicht den sizeHint des Windows.
Sorry, das sehe ich aus deinem Code nicht so - imho wird immer wieder ein QPrinter erzeugt ohne den alten ggf. zu löschen. Aber evtl. hast Du auch den betreffenden Codeschnipsel nicht gepostet.
Jein, du hast schon recht. Der wird nicht gelöscht.. bzw. wurde. habe mir deinen Tip zu Herzgen genommen. Allerdings wurde stets nur EIN printer erzeugt pro Plotter-Instanz. (Ok, wenn ich diesen EINEN Plot mehrmals drucke, dann mehrere, was aber keinen Sinn ergibt, da man ja normalerweise nicht mehrmals dasselbe drucken will). Drucke ich alle Plots wird eben in der Parent EIN printer erzeugt und übergeben. Nur der printer* wird dann auf extPrinter* gesetzt.