Seite 1 von 1
QPainter auf QLabel Problem
Verfasst: 21. Dezember 2004 13:50
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
Verfasst: 21. Dezember 2004 15:36
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
Verfasst: 21. Dezember 2004 15:52
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.
Verfasst: 22. Dezember 2004 09:32
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.
Verfasst: 22. Dezember 2004 10:05
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
Verfasst: 22. Dezember 2004 10:10
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*
Verfasst: 22. Dezember 2004 10:36
von sdaub
Ich benutze kein PaintEvent. Wie muss ich dass denn dann in meinen Code einbinden?
Verfasst: 22. Dezember 2004 10:54
von gandalf
Eigentlich so wie vorher gezeigt
zusätzlich natürlich in der .h
da drin definierts du halt was passiert wenn repaint aufgerufen wird z.B manuel oder durch Mausevents etc
gandalf
Verfasst: 22. Dezember 2004 13:03
von sdaub
auch wenn das wahrscheinlich nicht die eleganteste Art ist, aber so funktioniert es.
Danke für die Hilfe
und Frohe Weihnachten an Alle
Steffen