[gelöst] QPainter funktioniert nur mit this?

Alles rund um die Programmierung mit Qt
Antworten
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

[gelöst] QPainter funktioniert nur mit this?

Beitrag 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?
Zuletzt geändert von forgoden am 10. Juni 2009 15:06, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag von forgoden »

okay danke
Antworten