Widget zeigt einige seine Kinder an

Alles rund um die Programmierung mit Qt
Antworten
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Widget zeigt einige seine Kinder an

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag 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.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ....
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag 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.
Antworten