根据内容动态调整qwidget和qlayout的大小

时间:2019-06-17 19:41:03

标签: c++ qt qwidget qlayout

我正在处理QT中的第一个项目,并且对动态调整小部件和布局的大小有疑问。

我正在开发一个qwidget,它将基于给qwidget的构造函数提供的参数来容纳许多小部件。我很难调整窗口小部件以及布局和组框的大小以适应构造函数传递的窗口小部件的数量。

我的qwidget当前包含一个组框和该组框内的布局。在构建小部件时,我将小部件添加到布局中,然后尝试使用setSizeConstraint(),adjustSize()和resize()函数来调整布局的大小。这些似乎都无法正确调整窗口小部件的大小,但是由于我的窗口小部件仍然彼此重叠。

我的用户界面本质上就是这个

  

Qwidget

     

-> qGroupBox

     

-> qLayout

     

---> qwidget1

     

---> qwidget2

     

---> qwidget3

等下面是构造函数

    myWidget::myWidget(int numRows) :
        myUiPtr(new UiLLmyWidget)
{
    //Add widget rows
    myUiPtr->setupUi(this);
    for(int i=0; i<numRows; i++)
    {
        myRowWidget *row = new myRowWidget();
        myUiPtr->myLayout->addWidget(row);
    }

    //Attempt to resize widget (doesn't work)
    myUiPtr->myLayout->setSizeConstraint(QLayout::SetMinimumSize);
    myUiPtr->myGroupbox->adjustSize();
    this->adjustSize();
}

我希望小部件及其所有子组都随着我在布局中创建的小部件的数量而调整大小,但这不会发生,而是让小部件彼此重叠。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

QGridLayout* layout = new QGridLayout();
layout->setAlignment(Qt::AlignTop);
myUiPtr->groupbox->setLayout(layout);

...
layout->addWidget(row, layout->count(), 0);

您可以使用QScrollArea代替Groupbox(或在Groupbox内部),因此较小的Window Size确实会导致重叠。

编辑: 抱歉,我没有考虑“调整小部件大小”的问题。