我正在尝试制作一个布局,一旦它的第一行被窗口小部件填充,它就开始向下一行添加新的布局。 QGridLayout
看起来像我需要的东西,但它具有对称性,我不想要对称,因为小部件都是不同的大小。 QVBoxLayout
可以完美地用于一行,但是使它成为多行是不可能的。
答案 0 :(得分:2)
如果我理解你的目标是正确的,我认为使用Flow Layout而不是黑客攻击QGridLayout会更简单,看起来更好看;它恰好发生在其中一个Qt示例就是这样的事情(代码似乎是BSD许可的,请参见页面底部):http://doc.qt.io/qt-5/qtwidgets-layouts-flowlayout-example.html
答案 1 :(得分:1)
您可以使用QGridLayout,并通过操作addWidget调用中的rowspan和colspan参数,为每个小部件定义不同的大小。
例如假设我有一个QTextEdit,一个QPushButton和一个QLabel,我想要彼此水平排列。 QTextEdit是QPushButton宽度的四倍,是QLabel宽度的一半。
我可以在QGridLayout中表示这些尺寸,如下所示:
gridlayout->addWidget(textedit, 0 /*row*/, 0 /*col*/, 1 /*rowSpan*/, 4 /*colSpan*/, 0);
glayout_->addWidget(button, , 0, 4, 1, 0);
gridlayout->addWidget(label, 0, 5, 1, 2, 0);