【发布时间】:2017-06-11 15:16:21
【问题描述】:
我有 9 个 QWidget。有时它们是看不见的。它们都在一个 3x3 的网格中。
[0][3][6]
[1][4][7]
[2][5][8]
现在如果例如小部件 3 不可见,其他小部件应该调整大小:
[ 0 ][ 6 ]
[ 1 ][ 4 ][ 7 ]
[ 2 ][ 5 ][ 8 ]
垂直方向也应该这样,基本上所有的空白空间都应该被填满,但我不知道该怎么做。当我将小部件设置为不可见时,不会占用空白空间。
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);
}
提前感谢您的帮助。
【问题讨论】:
-
我尝试实现相同的行为。我已经通过使用
QVBoxLayout实现行和QLabel实现单元格(行)成功地解决了这个问题。一切都可以直接使用,无需调整几何形状。 -
@Gluttton 很有趣,我考虑过使用 QVBoxLayout 和 QHBoxLayout 但我不确定。您有实施的示例吗?
-
很遗憾我不能分享它。但这是微不足道的实现:something lile pastebin.com/th4mHWu0 .
-
@Gluttton 很有魅力,非常感谢!把它放在一个答案中,我会投赞成票。
标签: c++ qt qgridlayout