首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QGridLayout 3x3网格大小调整小部件

QGridLayout 3x3网格大小调整小部件
EN

Stack Overflow用户
提问于 2017-06-11 15:16:21
回答 3查看 1.2K关注 0票数 2

我有9 QWidgets。有时它们是看不见的。它们都在3x3网格中。

代码语言:javascript
运行
复制
[0][3][6]
[1][4][7]
[2][5][8]

现在,如果小部件3变得不可见,其他小部件应该调整大小:

代码语言:javascript
运行
复制
[   0   ][   6   ]
[  1 ][  4 ][  7 ]
[  2 ][  5 ][  8 ]

同样的情况应该是垂直发生的,基本上所有的空空间都应该被填满,但我不知道该怎么做。当我设置一个不可见的小部件时,空空间不会被占用。

代码语言:javascript
运行
复制
QGroupBox *parent = getParent();
QGridLayout *layout = new QGridLayout;
layout->setMargin(0);
layout->setMargin(5);
int w = parent->geometry().width();
int h = parent->geometry().height();
QSize min(w/3-2*layout->spacing(),h/3-2*layout->spacing());
QSize max(w,h);
for (int n = 0; n < 6; ++n)
{
    layout->setRowStretch(n,6);
    layout->setColumnStretch(n,6);
}

for (size_t n = 0, t = widgets.size(); n < t; ++n)
{
    QWidget *widget = widgets[n];
    widget->setMinimumSize(min);
    widget->setMaximumSize(max);
    widget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    layout->addWidget(widget);
}

提前谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-11 16:24:18

我也有过类似的经历。我使用这样的小部件来可视化设备的动态更改配置。

所需的行为可以通过使用QVBoxLayout作为行和QWidget广告单元(列)来实现。在我的例子中,我使用从QLabel派生的自定义小部件作为单元。没有几何学的调整,一切都是从盒子开始工作的。

伪码:

代码语言:javascript
运行
复制
// Inside widget's constructor (or createLayout function).
topLayout = new QVBoxLayout ();

aLayout = new QHBoxLayout ();
bLayout = new QHBoxLayout ();
cLayout = new QHBoxLayout ();

topLayout->addLayout (aLayout);
topLayout->addLayout (bLayout);
topLayout->addLayout (cLayout);

setLayout (topLayout);

...

// Add cell to corresponding row.
void add_cell (QWidget * cell)
{
    aLayout->addWidget (cell);
}
票数 2
EN

Stack Overflow用户

发布于 2017-06-11 16:27:54

首先,通过迭代布局和删除包含小部件的项,从布局中删除小部件。这样做时,还可以收集有关可用单元格的信息。然后重新插入具有适当位置和跨度的小部件。

票数 2
EN

Stack Overflow用户

发布于 2017-06-11 15:28:57

据我所知,没有办法自动做到这一点。我建议您保留一个小部件列表,并通过清除网格布局并在每次小部件更改其可见性时再次填充它们来重新定位它们。我发现只有这样,我才能解决类似的任务(用于重新排列网格中的小部件),而无需通过子类QLayout创建自定义布局。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44485395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档