ich arbeite gerade an einer grafischen Anwendung, die mehrere Zeichenebenen übereinandergelegt ausgibt.
Ich hab das Problem jetzt mal auf eine von QWidget abgeleitete Klasse heruntergebrochen und das Problem taucht immernoch auf.
Also. Im PaintEvent werden mehrere (hier zwei) QImages gerendert, die anschließend mit einem QPainter einfach übereinandergezeichnet auf dem Monitor ausgegeben werden. (deswegen ARGB Format)
Nun zum Problem:
Wenn man nun dieses Fenster mit der Maus kleiner zieht, werden plötzlich irgendwelche zusätzlichen Linien und Punkte mit unterschiedlichen Farben gezeichnet.
Ich arbeite auf X11 mit Suse Linux (Qt 4.3.2). Wenn ich das Programm auf einer 64-Bit Maschine kompiliere, ist das Problem noch viel gravierender.
Wenn ich allerdings nur ein Image ausgebe, und den Hintergrund mit fillRect() schwarz mache, entsteht das Problem nicht. Lasse ich allerdings fillRect weg, ist das Problem wieder da.
Hier ist der Test Code des PaintEvents:
Code: Alles auswählen
void gui_test::paintEvent( QPaintEvent * )
{
QSize si = this->size();
QRect re = this->rect();
//1. Image rendern
QImage scrImage1(si,QImage::Format_ARGB32);
QPainter iPainter1;
iPainter1.begin(&scrImage1);
//iPainter1.fillRect(re,Qt::black);
iPainter1.setPen(QPen(Qt::blue,2,Qt::SolidLine));
iPainter1.drawLine(QPoint(0,0),QPoint(si.width(),si.height()));
iPainter1.setPen(QPen(Qt::red,1,Qt::SolidLine));
iPainter1.drawLine(QPoint(0,si.height()),QPoint(si.width(),0));
iPainter1.end();
//2.Image rendern
QImage scrImage2(si,QImage::Format_ARGB32);
QPainter iPainter2;
iPainter2.begin(&scrImage2);
iPainter2.setPen(QPen(Qt::green,3,Qt::SolidLine));
iPainter2.drawLine(QPoint(0,si.height()/2),QPoint(si.width(),si.height()/2));
iPainter2.setPen(QPen(Qt::yellow,5,Qt::DotLine));
Painter2.drawLine(QPoint(si.width()/2,0),QPoint(si.width()/2,si.height()));
iPainter2.end();
//beide Images auf den Bildschirm malen
QPainter scrPainter(this);
scrPainter.drawImage(QPoint(0,0),scrImage1);
scrPainter.drawImage(QPoint(0,0),scrImage2);
};P.s.