我希望有一个QWidget
实例使用QHBoxLayout
和(理想情况下自动调用某些函数也很好)水平调整大小以适应其内容。水平调整大小就足够了,因为所有小部件(包括容器本身)都具有相同的高度。
用例如下:小部件,我们称之为容器,是浮动的,即不是任何布局的一部分。用户应该能够将具有固定大小的其他小部件(通过调用函数)添加到容器的布局,容器在该布局上增长以适应其新内容。用户还应该能够删除先前添加的小部件,容器再次收缩。在插入第一个窗口小部件时将不会创建容器,并在删除最后一个窗口小部件时删除该容器,即它将始终包含至少一个窗口小部件。
示例:添加第一个小部件后,容器看起来像这样,|
是左/右边框:
|<1st widget>|
添加另一个之后,它看起来像这样:
|<1st widget> <2nd, longer widget>|
删除第一个小部件后,它看起来像这样:
|<2nd, longer widget>|
我怀疑这应该很简单,但我迷失在容器的sizeHint
,sizePolicy
,adjustSize()
及其布局的sizeContraint
以及几个试图通过大量设置大小和强制更新而实际上无处可去(即容器根本没有调整大小,容器只能增长但不会缩小等)。我怀疑我一定错过了一些明显的东西......?
答案 0 :(得分:9)
你的猜测是正确的。必须为布局中的窗口小部件设置大小策略。第一个小部件应该有QSizePolicy::Minimum
,第二个小部件应该有QSizePolicy::Expanding
以获得所需的效果。这是一个示例应用程序:
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton *button1 = new QPushButton("Hello");
button1->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
QObject::connect(button1, SIGNAL(clicked(bool)), button1, SLOT(hide()));
QPushButton *button2 = new QPushButton("World");
button2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
QObject::connect(button2, SIGNAL(clicked(bool)), button2, SLOT(hide()));
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(button1);
layout->addWidget(button2);
QWidget main;
main.setLayout(layout);
main.show();
return a.exec();
}