Seite 1 von 1

[gelöst] Wie male ich ein Rect auf ein bestehendes Widget?

Verfasst: 4. März 2009 11:28
von nasahl
Hallo,

ich möchte ein Rechteck auf ein bestehendes Widget malen. Ich hätte mir das ungefähr so vorgestellt:

Code: Alles auswählen

int main( int argc, char **argv )
{
	QApplication app(argc, argv);

	Widget* myWidget = ...;
	myWidget->show();

       QPainter painter(myWidget );
       painter.drawRect( QRect(10,20,30,40) );
       myWidget->update();

       return app.exec();
}
Das liefert aber die folgende QT Fehlermeldung:
"QWidget::repaint: It is dangerous to leave painters active on a widget outside of the PaintEvent"

Man darf nur im PaintEvent zeichnen.

Meine Frage ist nun, ob es irgendeine andere Möglichkeit oder einen Trick gibt dennoch ein Rechteck auf ein Widget zu zeichnen?

Christof

Verfasst: 4. März 2009 12:47
von upsala
Was bringt dir das? beim update() wird das Rechteck eh schon wieder übermalt...

Verfasst: 4. März 2009 13:28
von STS301
du musst eine eigene Zeichenfunktion schreiben, damit es funktioniert

setz es einfach unter public oder private (theoretisch ist es egal)

Code: Alles auswählen

void paintEvent(QPaintEvent *)
und dann gib den Code in der neuen Funktion ein

Verfasst: 4. März 2009 14:34
von nasahl
Danke schon mal für die Hinweise.

Leider lösen sie mein Problem nicht. Ich möchte so ähnlich wie der ViszalStudio Spy die Grösse der zugrundeliegenden und inneren Widgets mit einem roten Rechteck darübermalen. Das sollnur für die aktuelle Situation sichtbar sein. Danach kann es wieder verschwinden.
Deshalb hilft mir das Überladen der paintEvent-Methode nicht, da ich darauf keinen Zugriff habe.

Christof

Verfasst: 4. März 2009 14:48
von upsala
2 Möglichkeiten: eventFilter oder QRubberBand

[solved] Wie male ich ein Rechteck auf ein besteh. Widget?

Verfasst: 4. März 2009 16:20
von nasahl
Super.

QRubberBand ist was ich brauche.

Danke,

Christof