Seite 1 von 1

QPrinter: painter.drawImage() beendet Gui mit Segment. Fault

Verfasst: 31. August 2006 20:32
von kw-schriese
Hi,

ich programmiere mit python und den dazugehoerigen Python bindings fuer Qt4. Ich erzeuge ein QImage, dass dann gedruckt werden soll. Alles funktioniert soweit, aber wenn die Zeile printerPainter.drawImage(0,0, image) ausgefuehrt wird, kommt es zu einem Segmentation Fault. Ich hab mir den Viewport und die neue groesse, des Images ausgegeben lassen und es sah gut aus. Also warum bekomme ich einen Segmentation Fault und das noch ohne irgendwelche Fehlemeldungen? Das Image als jpg speichern, funktioniert ohne Problem. Hier der Code der printer-routine:

def printView(self):
printDialog = QPrintDialog(self.printer, self)
if printDialog.exec_():
printerPainter = QPainter(self.printer)

# create an image of the current model
image = self.createImage(self.modelWidth*self.scalingFactor, self.modelHeight*self.scalingFactor)

# rescale the image according to printer settings
printerRect = printerPainter.viewport()
imageSize = image.size()
imageSize.scale(printerRect.size(), Qt.KeepAspectRatio)

# print image
printerPainter.setViewport(printerRect.x(), printerRect.y(), imageSize.width(), imageSize.height())
printerPainter.setWindow(image.rect())
#image.save("/home/katja/saveTest.jpg", "JPG")
printerPainter.drawImage(0, 0, image)
printerPainter.end()

Verfasst: 31. August 2006 20:53
von Christian81
Benutze bitte die 'code' - Tags zum Darstellen von code. :)

Probiere mal

Code: Alles auswählen

 printerPainter = QPainter();
 if(!printerPaint.begin(self.printer))
 ...

anstatt
 printerPainter = QPainter(self.printer)

Verfasst: 1. September 2006 09:53
von kw-schriese
Hi Christian,

danke fuer die schnelle Antwort.
Das aendert leider auch nichts. Es gibt wieder ein Segmentation fault.

Katja

Verfasst: 1. September 2006 10:46
von kw-schriese
Hi Christian,

noch ein Frage. Warum schreibst Du

Code: Alles auswählen

 if ! 
?

Das wuerde doch bedeuten, dass der painter nicht gestartet wird. Aber dann kann man doch auch nicht drucken, oder?

Danke
katja

Verfasst: 1. September 2006 10:50
von Christian81
Das soll ein Test sein ob man überhaupt drucken kann!
Lies mal die Beschreibung von QPainter::begin() !

Verfasst: 1. September 2006 12:00
von kw-schriese
Ich weiss, dass es True oder Fals zuruckgibt. Es ist True, somit sollte der painter gut arbeiten. Kann es sein, dass der Viewport nicht richtig gesetzt ist und er deshalb abstuerzt? Wenn ich printerpainter.viewport() aufrufe, ist dann der Druckrand abgezogen oder muss ich diesen noch extra setzen?

Danke
Katja

Verfasst: 1. September 2006 12:05
von Christian81
Egal ob was richtig oder falsch gesetzt ist - abstürzen dürfte er da nicht. Ich würde wohl mal die Qt-Libs als debug bauen und ein bischen debuggen.
Was anderes fällt mir da nicht ein da der rest passen müsste.