我正在尝试创建一个可停靠的工具栏(类似于您在 Photoshop 中使用的工具栏),它将包含一个 2 x (n) 的按钮网格。我的想法是使用一个 QGridLayout 的父级到一个空白 QWidget,它被添加到一个 QDockWidget,并将按钮添加到 QGridLayout。除了对齐之外,这似乎有效。

我已经为按钮设置了对齐...

myLayout->addWidget(button1,0,0,1,1,Qt::AlignTop);
myLayout->addWidget(button2,0,1,1,1,Qt::AlignTop);
myLayout->addWidget(button3,1,0,1,1,Qt::AlignTop);
myLayout->addWidget(button4,1,1,1,1,Qt::AlignTop);

...然而网格正在扩展到 QDockWidget 的整个高度,如下所示:

按钮也在水平扩展,以填充整个空间。我想我可以限制水平调整大小的能力(如果可能的话?)。

是否有我在文档中忽略的功能可以更好地控制 GridLayout 以限制它填充父小部件的整个宽度/高度?作为一个附带问题,有没有办法防止 QDOckWidget 在某个方向上重新调整大小?

最佳答案

使用 QVBoxLayout,首先添加 QGridLayout,然后添加这样的拉伸(stretch):

my_vboxlayout->addLayout( my_gridlayout );
my_vboxlayout->addStretch( 1 );

或者你可以告诉你的 QGridLayout 最后一行应该扩展到最大尺寸,这将插入按钮。
在您的情况下,它将是:
mygridlayout->setRowStretch( 2, 1 ); // give 3rd row maximum space

文档链接:
QBoxLayout
QGridLayout

10-08 17:33