Seite 1 von 1

Layout

Verfasst: 24. Juli 2010 12:21
von Nvidia
Hallo,
wie sag ich dem Widget in einem Layout, das es sich so viel Platz nehmen soll, wie es Platz hat?
Mit showMaximed(); funktioniert das aber in der Doku steht das funktioniert nur unter Windows.
Außerdem streickt die Funktion bei einem leeren QLabel, welches gefärbt ist, irgentwie auch.
gruß nvidia

Verfasst: 24. Juli 2010 13:03
von padreigh
gabs da nicht sowas wie:

Code: Alles auswählen

setSizePolicy ( QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical )

Verfasst: 24. Juli 2010 13:49
von Nvidia
das funktioniert bei mir nicht so ganz:
ich hab das hier

Code: Alles auswählen

    QSizePolicy q(QSizePolicy::Ignored,
QSizePolicy::Ignored,QSizePolicy::Label);
    show->setSizePolicy(q);
nach der Doku:
The sizeHint() is ignored. The widget will get as much space as possible.

funktioniert aber irgentiwe nicht wirklich, es bleibt immer noch klein

Verfasst: 24. Juli 2010 15:46
von padreigh

Code: Alles auswählen

QWidget * wid = new QWidget;
wid->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
Das sorgt dafür das das Widget expandiert bis es seine maximumSize() erreicht hat (bzw. falls nicht gesetzt bis kein platz mehr da). Wenn du Meherere Widgets in einem Layout hast musst du den anderen logischerweise zB QSizePolicy::Minimum (o.ä.) zuweisen, sonst geiern die auch nach mehr Platz. Wenn du möchtest das ein Widget immer doppelt soviel Platz kriegt wie das andere (bei gleicher SizePolicy) sind die SizeStretch von SizePolicy dein Freund ...

QLabel:
Warum schauste nicht in die QLabel was es da für Methoden so gibt?

Code: Alles auswählen

int main( int argc, char** argv ) 
{
    QApplication app(argc, argv);

    QPicture picture;
    QPainter painter;
    painter.begin(&picture);           // paint in picture
    painter.drawEllipse(10,20, 80,70); // draw an ellipse
    painter.end();                     // painting done

    QWidget w;
    QVBoxLayout lay;
    QLabel l1("label");
    QLabel l2;
    l2.setScaledContents(true); // wie wärs hiermit ....
    l2.setPicture(picture);
    lay.addWidget(&l1);
    lay.addWidget(&l2);
    w.setLayout(&lay);
    w.show();
    return app.exec();
}