Seite 1 von 1

Widget zeigt einige seine Kinder an

Verfasst: 11. Februar 2009 10:48
von Einmaliger
Hi !

Eigentlich sollte mein Problem völlig trivial sein, aber ich stehe wohl auf dem Schlauch.

Ich habe da eine Widget-Klasse, deren Objekte eine Liste von weiteren Widgets haben, sagen wir mal: "QList<QWidget*> myChilds". Die Klasse soll nun nichts anderes tun, als einen Teil diese Widgets untereinander anzuzeigen, so ähnlich wie ein QVBoxLayout oder ein QListView. Was ich dazu versucht habe, ist die Widgets mittels setGeometry sinnvoll zu platzieren. Nun sollen sie angezeigt werden:

Code: Alles auswählen

void MeinWidget::paintEvent(QPaintEvent *event)
{
    foreach(QWidget *w, myChilds)
        if(event->region().intersects(w->geometry()))
            //// was kommt hier hin?
}
Was ist nun die "saubere" Art, die Widgets dazu zu bringen, sich zu zeichnen?

Verfasst: 11. Februar 2009 11:18
von franzf
Die saubere Art wäre, dass du ein Layout verwendest.
So werden die WIdgets auch gleich automatisch in ihrer Größe angepasst, wenn sich dein parent-widget in der Größe
ändert.

Verfasst: 11. Februar 2009 12:48
von Einmaliger
franzf hat geschrieben:So werden die WIdgets auch gleich automatisch in ihrer Größe angepasst, wenn sich dein parent-widget in der Größe
ändert.
Das sollen sie gerade nicht. Vielmehr soll sich - vereinfacht gesagt - die QList<Widget*> selbst verändern, wenn sich die Größe des Parents ändert. Es sollen neue dazukommen oder alte gelöscht werden. Daher dachte ich, dass ein Layout keine saubere Lösung wäre, da dieses ja mit einer festen Liste von Widgets arbeitet und diese nur passend platziert.

Verfasst: 11. Februar 2009 13:45
von RHBaum
Mit welcher Methode passt du denn die Groesse an ?

Normal sollten doch setPos und setSize intern eh zu nem repaint fuehren, da intern move und size events ausgeloest werden ! Kann es sein das du an den Eventhaendlern rumgespielt hasst ?

Ich wuerd trotzdem nen Layout verwenden ... die sind einfach und fuer fast alles configurierbar ....
Du kannst deswegen aber trotzdem die groessen abfragen und dynamsich die anzahl der angezeigten Widgets aendern. Sparst dir halt das ganze sizen und verschieben ....

Ciao ....

Verfasst: 11. Februar 2009 14:10
von Einmaliger
RHBaum hat geschrieben:Mit welcher Methode passt du denn die Groesse an ?

Normal sollten doch setPos und setSize intern eh zu nem repaint fuehren, da intern move und size events ausgeloest werden ! Kann es sein das du an den Eventhaendlern rumgespielt hasst ?
Mittels setGeometry, was laut Doku einen moveEvent und einen resizeEvent auslöst. Da die Widgets aber gar nicht angezeigt werden, bin ich der Meinung, irgendwas überhaupt nicht verstanden zu haben ;-)
RHBaum hat geschrieben:Ich wuerd trotzdem nen Layout verwenden ... die sind einfach und fuer fast alles configurierbar ....
Du kannst deswegen aber trotzdem die groessen abfragen und dynamsich die anzahl der angezeigten Widgets aendern. Sparst dir halt das ganze sizen und verschieben ....
Okay, überzeugt. Das Layout müsste dann die Resize-Events abfangen und entsprechend für die Anpassung der Widget-Liste sorgen. Damit das generisch funktioniert, werd ich vermutlich was anderes als eine QList verwenden müssen, da die Widgets ja gleich mit den richtigen Inhalten befüllt werden müssen.