24

我想要一个QWidget使用QHBoxLayoutand 的实例(理想情况下是自动的,但在调用某些函数时也可以)水平调整大小以适应其内容。水平调整大小就足够了,因为所有小部件,包括容器本身,都将具有相同的高度。

用例如下: 小部件,我们称之为容器,是浮动的,即不是任何布局的一部分。用户应该能够向容器的布局添加具有固定大小的更多小部件(通过调用函数),容器会在此基础上增长以适应其新内容。用户还应该能够删除先前添加的小部件,容器再次缩小。直到第一个小部件被插入并在最后一个小部件被移除时删除,容器才会被创建,即它总是包含至少一个小部件。

一个例子:添加第一个小部件后,容器看起来像这样,|作为它的左/右边界:

|<1st widget>|

添加另一个之后,它看起来像这样:

|<1st widget>  <2nd, longer widget>|

删除第一个小部件后,它看起来像这样:

|<2nd, longer widget>|

sizeHint我怀疑这应该有点简单,但是我在容器、、、和它的布局之间的某个地方迷路了sizePolicy,并且多次尝试明确设置大小和强制更新,但基本上一无所获(即容器根本没有调整大小,容器只会增长但不会缩小等)。我怀疑我一定错过了一些明显的东西..?adjustSize()sizeContraint

4

1 回答 1

12

你的猜测是对的。必须为布局中的小部件设置大小策略。第一个小部件应该有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();
}
于 2012-12-08T09:52:42.910 回答