QPainter auf QLabel Problem

Alles rund um die Programmierung mit Qt
Antworten
sdaub
Beiträge: 20
Registriert: 24. November 2004 09:31

QPainter auf QLabel Problem

Beitrag von sdaub »

Hallo,
ich habe ein QPainter, der nach ButtonClick auf einem QLabel zeichnet. Klappt alles hervorragend. Bei erneutem Klick, wird einfach drübergezeichnet, obwohl ich vorher QLabel.clear() und auch Qlabel.setText("") ausprobiert habe.

Hat irgendwer eine Idee, wie ich ein erneutes Zeichnen (und nicht Überzeichnen) auf ein leeres QLabel (oder sonst irgendwas) hinbekomme?

Danke für die Hilfe

Steffen
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

hallo

hast du auch das repaint nicht vergessen??

edit: sorry ich sollte nachdenken dann währe das neue auch nicht da
rufst du das repaint mit Attributen oder ohne auf??

zeig mal deinen Code

gruß gandalf
benutzte QT 3.2 nc auf w2k
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ich hoffe, ich mutmaße jetzt nicht zu sehr, denn ich habe es nicht ausprobiert.

Du benutzt QLabel nicht zufällig als Refernz, so wie du dich in deinem Post ausgedrückt hast?
Falls ja, mach es als Pointer und schon sollte es genauso funktionieren mit -> clear -> setText. Dabei sollte er nix überzeichen, sondern neu Zeichnen.

Ich weiss auch nicht, ob ich mit folgender Aussage noch auf dem laufenden bin:
BENUTZTE WIDGETS IMMER ALS POINTER.
sdaub
Beiträge: 20
Registriert: 24. November 2004 09:31

Beitrag von sdaub »

Code: Alles auswählen

    # Initialisierung
		self.qlNummer1 = QLabel(self.object,"qlNummer")
        	self.qlNummer1.setGeometry(QRect(10,40,625,475))
		self.painter1 = QPainter(self.qlNummer1)	

		# in einer Funktion
		self.qlNummer1.clear()
		# sollte sicherstellen das alles leer ist und dann neu gezeichnet wird
		....
		....
		verschiedene Zeichenvorgänge
		....
		....
		self.painter1.end()
		
Oben seht ihr also ein Teil meines Codes. Ich programmiere übrigens mit Python und QT. Habe leider noch keine Lösung gefunden.
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

mmh benutzt du kein PaintEvent soweit ich weiß sollte man solche sachen im PaintEvent handeln oder aufrufen, damit der Repaint auch vernünftig funktioniert.

Code: Alles auswählen

void MyWidget::PaintEvent(QPaintEvent *e)
{
//was passiert bei einem repaint...
//....
}
gandalf
benutzte QT 3.2 nc auf w2k
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Mh, also normalerweise sollte das PaintEvent das doch alleine machen!?!?!

Ich habe genau das gleiche Szenario schon einmal gehabt, lediglich ohne dem Problem, da ich auch ein Label -> clear und dann Label -> setText gemacht habe.

Wie aber gesagt, ein Problem bzgl. übermalen gabs da nie. Ich bin ratlos. Sind die Python Bindings irgendwie anders implementiert? Vielleicht ohne PaintEvent? *grübel*
sdaub
Beiträge: 20
Registriert: 24. November 2004 09:31

Beitrag von sdaub »

Ich benutze kein PaintEvent. Wie muss ich dass denn dann in meinen Code einbinden?
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

Eigentlich so wie vorher gezeigt
zusätzlich natürlich in der .h

Code: Alles auswählen

private:
    void paintEvent ( QPaintEvent* e)
da drin definierts du halt was passiert wenn repaint aufgerufen wird z.B manuel oder durch Mausevents etc


gandalf
benutzte QT 3.2 nc auf w2k
sdaub
Beiträge: 20
Registriert: 24. November 2004 09:31

Beitrag von sdaub »

Code: Alles auswählen

self.qlNummer1.repaint(QRect(10,10,625,475), True)
auch wenn das wahrscheinlich nicht die eleganteste Art ist, aber so funktioniert es.

Danke für die Hilfe
und Frohe Weihnachten an Alle
Steffen
Antworten