Qt-Cardlayout-Beispiel

Alles rund um die Programmierung mit Qt
Antworten
Gayson
Beiträge: 16
Registriert: 7. Mai 2006 14:49

Qt-Cardlayout-Beispiel

Beitrag von Gayson »

Hallo!
Ich schau mir grad das Custom Cardlayout (http://doc.trolltech.com/4.1/layout.html) an, und hab dazu ein paar Fragen:

a) Zum Verständnis: mit setGeometry wird einem QLayoutItem ein Bereich gegeben, in dem gezeichnet werden kann. setGeometry kümmert sich um das Zeichnen in diesem Bereich.

b) was macht

Code: Alles auswählen

s = s.expandedTo(o->sizeHint());
Ich verstehe auch nicht die Beschreibung in der Doku davon :(. Wird das eine QSize ledigklich um das andere addiert? Oder wird nur die größere height/ width genommen?

c) In der Funktion setGeometry steht

Code: Alles auswählen

int w = r.width() - (list.count() - 1) * spacing();
. Warum wird das gemacht? Man erhält doch da die "tatsächlich nutzbare Breite". Bei

Code: Alles auswählen

QRect geom(r.x() + i * spacing(), r.y() + i * spacing(), w, h);  
o->setGeometry(geom);
müsste doch die Breite, die das QLayoutItem benutzen darf, übergeben, oder?

Danke an euch!!
Gayson
Beiträge: 16
Registriert: 7. Mai 2006 14:49

Beitrag von Gayson »

Hm, a) und b) habe ich unter viel Mühe herausgefunden. Dennoch bleibt setGeometry ein kleines Geheimnis für mich:

Code: Alles auswählen

    void CardLayout::setGeometry(const QRect &r)
    {
        QLayout::setGeometry(r);

        if (list.size() == 0)
            return;

        int w = r.width() - (list.count() - 1) * spacing();
        int h = r.height() - (list.count() - 1) * spacing();
        int i = 0;
        while (i < list.size()) {
            QLayoutItem *o = list.at(i);
            QRect geom(r.x() + i * spacing(), r.y() + i * spacing(), w, h);
            o->setGeometry(geom);
            ++i;
        }
    }
Warum muss w und h ausgerechnet werden, warum wird nicht direkt an das QLayoutItem das r.width() und r.height() übergeben?!
Antworten