QT Layout
-
Hey Leute,
Ich habe in einem Projekt ein Widget, dass aus zwei anderen Widgets besteht. Das erste auf der linken Seite hat eine feste Größe von 200px, und ich versuche jetzt schon ewig, dem zweiten zu verjlickern, dass es die ganze restliche Breite einnehmen soll, der oberste Widget-Container ist nämlich das CentralWidget eines MainWindow-Objektes. IM Prinzip soll also die linke Leist immer am Rand kleben und die rechte den Rest einnehmen. Weiß jemand wie ich das anstellen muss?
thx
mfg
nalpak01
-
nalpak01 schrieb:
Hey Leute,
Ich habe in einem Projekt ein Widget, dass aus zwei anderen Widgets besteht. Das erste auf der linken Seite hat eine feste Größe von 200px, und ich versuche jetzt schon ewig, dem zweiten zu verjlickern, dass es die ganze restliche Breite einnehmen soll, der oberste Widget-Container ist nämlich das CentralWidget eines MainWindow-Objektes. IM Prinzip soll also die linke Leist immer am Rand kleben und die rechte den Rest einnehmen. Weiß jemand wie ich das anstellen muss?
thx
mfg
FranzLies dir nochmal ganz genau http://doc.trolltech.com/4.0/layout.html durch. Achte dabei auf die sizePolicy;
-
Ich hab jetz jede Menge rumprobiert und es will nicht funktionieren ... seh ich das richtig, dass ich zuerst ein Objekt QSizePolicy (z.B. *edpolicy) erzeugen muss, dann darauf edpolicy->setHorizontalPolicy(...) anwenden muss und dann auf den rechten Widget, der ja groß sein soll, die Funktion ...->setSizePolicy(edpolicy)?
If there is a QLayout that manages this widget's children, the size policy specified by that layout is used. If there is no such QLayout, the result of this function is used.
Oder ist dass so zu verstehen, dass das nicht funktioniert, da ich für die rechte Box schon einen Layoutmanager benutze (sie besteht aus anderen Widgets)?
-
-
Es tut mir ja leid aber ich bin ein newbie und durch die doku schnall ichs halt nich ...
was mach ich hier falsch?
void MainWindow::createeditorwg() { editorwg = new QWidget; editor_aufforderung = new QLabel("Bitte erstellen Sie ein neues Modul!"); editorpolicy = new QSizePolicy; editorpolicy->setHorizontalPolicy(QSizePolicy(QSizePolicy::Maximum)); QVBoxLayout *editorLayout = new QVBoxLayout; editorLayout->addWidget(editor_aufforderung); editorwg->setSizePolicy(QSizePolicy(editorpolicy)); editorwg->setLayout(editorLayout); }
g++ -c -pipe -fno-strict-aliasing -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/default -I. -I/usr/include/QtGui -I/usr/include/QtCore -I/usr/include -I. -I. -I. -o mainwindow.o mainwindow.cpp mainwindow.cpp: In member function ‘void MainWindow::createeditorwg()’: /usr/include/QtGui/qsizepolicy.h:143: error: ‘QSizePolicy::QSizePolicy(int)’ is private mainwindow.cpp:57: error: within this context mainwindow.cpp:57: error: no matching function for call to ‘QSizePolicy::setHorizontalPolicy(QSizePolicy)’ /usr/include/QtGui/qsizepolicy.h:70: note: candidates are: void QSizePolicy::setHorizontalPolicy(QSizePolicy::Policy) mainwindow.cpp:61: error: invalid conversion from ‘QSizePolicy*’ to ‘int’ mainwindow.cpp:61: error: initializing argument 1 of ‘QSizePolicy::QSizePolicy(int)’ /usr/include/QtGui/qsizepolicy.h:143: error: ‘QSizePolicy::QSizePolicy(int)’ is private mainwindow.cpp:61: error: within this context make: *** [mainwindow.o] Fehler 1
-
QSizePolicy nimmt das QSizePolicy::Policy Enum als Wert. Das sieht dann so aus:
editorpolicy->setHorizontalPolicy(QSizePolicy::Expanding);
Ich würde einfach die sizePolicy der Widgets setzen.
http://doc.trolltech.com/4.0/qwidget.html#sizePolicy-prop
Und wenn ich mir die verschiedenen Möglichkeiten anschaue ist Expanding für das eine Widget doch eine gute Wahl.
editor_aufforderung->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-
okay danke ... daran lags also, ich habs die ganze Zeit mit QSizePolicy::Maximum probiert ... THX!!