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();
}