c++ - 根据内容动态调整 qwidget 和 qlayout 的大小
问题描述
我正在处理我在 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();
}
我希望小部件及其所有子分组可以根据我在布局中创建的小部件数量来调整大小,但这不会发生,而是让小部件相互重叠。
解决方案
您可以尝试以下方法:
QGridLayout* layout = new QGridLayout();
layout->setAlignment(Qt::AlignTop);
myUiPtr->groupbox->setLayout(layout);
...
layout->addWidget(row, layout->count(), 0);
您可以使用 QScrollArea 代替(或内部)Groupbox,因此较小的 Window Size 确实会导致重叠。
编辑:对不起,我没有考虑“调整小部件大小”的问题部分。
推荐阅读
- vba - 在 VBA 中将 DateTimeOffset 从 SQL Server 转换为 DateTime
- jquery - 带有多选选项的 Select2 只允许我写 2 个字符
- c++ - 是否有必要为派生类创建复制构造函数?
- google-bigquery - 如何在大查询中使用 ST_CONTAINS 加入地理列
- pandas - 无法使用 pip 安装 pandas 升级 numpy、6 和 python-dateutil 时出现问题
- javascript - JavaScript:从一个表格主体淡入到另一个表格主体
- python-3.x - Python 从同一项目中的更高目录导入
- python - 如何在 matplotlib 中为多个图格式化 x 轴
- android-sdk-manager - 当我尝试执行任何命令时,Android SDK [控制台工具] 仅显示“使用”帮助信息
- c - 强制转换中 const 说明符的必要性