Seite 1 von 1

[gelöst] QPainter funktioniert nur mit this?

Verfasst: 10. Juni 2009 14:19
von forgoden
hi,

ich will mit QPainter ein widget zeichnen

Code: Alles auswählen

	QPainter painter;
	painter.setPen(QPen(Qt::black, 1));

	painter.begin(toolsWidget);
	painter.drawLine(3, 3, 300, 300);
	painter.end();
das funktioniert nicht und gibt das aus
QPainter::setPen: Painter not active
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::end: Painter not active, aborted
nur mit this

Code: Alles auswählen

	QPainter painter;
	painter.setPen(QPen(Qt::black, 1));

	painter.begin(this);
	painter.drawLine(3, 3, 300, 300);
	painter.end();
warum ist das so?

Verfasst: 10. Juni 2009 14:28
von franzf
Weil du nen QPainter nur im paintEvent erstellen kannst. Und das paintEvent ist ja auch immer gebunden an dein Objekt.
Wenn du in einem WidgetA::paintEvent() den Painter auf WidgetB startest, gerschieht dies ja nicht im paintEvent von WidgetB.

Du kannst also nicht einfach auf ein fremdes Widget deinen Painter legen und drauf los malen.

Du kannst dir natürlich eine Schnittstelle definieren, mit der du vorgegebene Sachen auf das fremde WidgetB zeichnest (diese API muss natürlich das fremde WidgetB anbieten). Diese ändern aber den internen State des anderen Widget und rufen update() auf, womit dann das paintEvent des anderen WidgetB die neuen schönen Sachen malen kann.

Verfasst: 10. Juni 2009 15:05
von forgoden
okay danke