我得到了以下安排(原文在这里):
五个非常规大小的按钮(w:400,h:300),它们的排列方式如下:四个方形模式(两个在顶部,两个在底部),紧密结合在一起,第五个按钮在中心,重叠其他四个按钮的交集。我想知道在展开、最大化和/或最小化窗口时是否可以使用任何布局(网格布局、表单布局等)来保持这种排列?谢谢你的帮助。
我得到了以下安排(原文在这里):
五个非常规大小的按钮(w:400,h:300),它们的排列方式如下:四个方形模式(两个在顶部,两个在底部),紧密结合在一起,第五个按钮在中心,重叠其他四个按钮的交集。我想知道在展开、最大化和/或最小化窗口时是否可以使用任何布局(网格布局、表单布局等)来保持这种排列?谢谢你的帮助。
(听起来像是一个家庭作业问题。)
我的第一种方法是在设置网格布局后将第二个小部件作为第一个小部件的父级。然后你必须让第二个小部件与第一个一起调整大小。我过去在 iOS 中使用弹出对话框来做到这一点。
@hyde 的解决方案对于这个问题要优雅得多。我把所有东西都放在堆上,但是对于这样一个简单的应用程序,所有东西都可以放在堆栈上(QWidget * w = new QWidget();
=> QWidget w;
)。
#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QList>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget * w = new QWidget();
QGridLayout * grid = new QGridLayout();
QList <QPushButton *> buttons;
for(int i = 0; i< 5; i++)
{
buttons.append(new QPushButton("Button "+ QString::number(i+1)));
buttons.last()->setFixedSize(400, 300);
}
grid->addWidget(buttons.at(0),0,0,2,2);// upper left
grid->addWidget(buttons.at(1),0,2,2,2);// upper right
grid->addWidget(buttons.at(2),2,0,2,2);// lower left
grid->addWidget(buttons.at(3),2,2,2,2);// lower right
grid->addWidget(buttons.at(4),1,1,2,2);// centered
w->setLayout(grid);
w->show();
return a.exec();
}
如果您希望网格元素在调整网格大小时保持居中并且没有间隙,请确保在外部添加缓冲区行/列,并为它们设置拉伸值。就像在这个例子中一样。
希望有帮助。
使用 QGridLayout,大小为 4x4。然后让每个按钮使用 2x2 网格布局单元格,您可以通过使用正确的QGridLayout::addWidget()
重载来使用它。有给columnSpan
和rowSpan
的2。