【问题标题】:Dynamically resizing a qwidget and qlayout based on contents根据内容动态调整 qwidget 和 qlayout 的大小
【发布时间】:2019-10-31 10:27:22
【问题描述】:

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

我正在开发一个 qwidget,它将根据给定给 qwidget 构造函数的参数保存许多小部件。我很难调整我的小部件以及布局和组框的大小以适应构造函数传递的小部件的数量。

我的 qwidget 当前包含一个组框和该组框内的布局。在构建小部件时,我将小部件添加到布局中,然后尝试使用函数 setSizeConstraint()、adjustSize() 和 resize() 调整布局大小。这些似乎都不能正确调整小部件的大小,但是因为我的小部件仍然相互重叠。

我的 Ui 本质上就是这个

Qwidget

->qGroupBox

-->q布局

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

我希望小部件及其所有子分组可以根据我在布局中创建的小部件数量调整大小,但这不会发生,而是让小部件相互重叠。

【问题讨论】:

    标签: c++ qt qwidget qlayout


    【解决方案1】:

    您可以尝试以下方法:

    QGridLayout* layout = new QGridLayout();
    layout->setAlignment(Qt::AlignTop);
    myUiPtr->groupbox->setLayout(layout);
    
    ...
    layout->addWidget(row, layout->count(), 0);
    

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

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

    【讨论】:

      最近更新 更多