Qt-Pixmap in Subwindow zeichnen
-
Hallo, folgendes:
Ich habe soeben versucht ein Widget mit einer aufgemalten Pixmap in ein Layout eines "Oberwidgets" einzubinden.
Dabei geschah folgendes:Da die Zeichenfunktion des Subwindows beim Erstellen des (Sub-)Widgets aufgerufen wird und ich in der Zeichenfunktion das Pixmap zeichne(vom Nullpunkt des Subwidgets aus) und das Subwidget direkt beim Definieren im Oberwidget noch nicht im Layout steckt, d.h. nicht von ihm die Geometriedaten zugewiesen bekommt, wird das Bild komplett über das Oberwidget gezeichnet.
Eigentlich sollte es erst dann gezeichnet werden, wenn das Subwidget durch das Layout seinen Platz im Oberwidget zugewiesen bekommen hat.
Ich habe das so gelöst, dass ich einfach beim Erstellen des Subwidgets zunächst die Zeichenfunktion mittels einer Boolvariable blockiert habe bis eine Methode des Widgets diese auf true setzt.Meine Frage:
Kann ich durch QWidgeteigenschaften verhindern, dass die Paintfunktion direkt nach dem Konstruktor aufgerufen wird? Oder muss ich das wirklich selber lösen?Vielen Dank, hoffe es ist klar geworden, was passiert ist^^
-
Lass deine Mutmaßungen, die sind falsch. Die einzige Lösung: Mach es ordentlich. Ich bin mir ziemlich sicher, dass du du in deinem Widget (das das Pixmap malt) am Ende des Konstruktor ein this->show() stehen hast. Und wenn nicht da, dann irgendwo nach der Konstruktion deines Widgets.
Childwidgets werden automatisch angezeigt, wenn das parent-widget per show() angezeigt wird. Deshalb ist ein show() auf ein childwidget (fast) nie nötig.
-
Ich kann mich ehrlich gesagt an keine Mutmaßung von mir erinnern, habe doch nur mein Problem geschildert oO
Aber der Hinweis mit dem "Childwindows werden automatisch angezeigt" hat dann auch schon die Lösung gebracht. Das war mir zwar "klar", aber nicht bewusst.
Also einfach nicht als Child eintragen und dann per show() anzeigen.
Dankeedit: Ach, ich glaube ich weiß was du für Mutmaßungen hälst. Da habe ich aber lediglich beschrieben welches verhalten ich intendiere bzw. welches ich erzielen möchte.