我正在尝试创建一个按钮面板,其中将包含4个按钮,一个空格和另一个按钮,所有按钮均等距,如下所示:
我曾尝试使用Spacers,但似乎它们需要特定的高度和重量,并且我希望此布局具有足够的动态性,可以在任何分辨率下正确显示,因此固定大小的Spacer不会工作。
我尝试遵循以下代码,但这只是将前4个按钮压在顶部,将最后4个按钮压在底部,并且不能均匀地隔开它们。
QVBoxLayout *layout = new QVBoxLayout;
layout->setMargin(15);
layout->setSpacing(15);
layout->addWidget(button1, 1);
layout->addWidget(button2, 1);
layout->addWidget(button3, 1);
layout->addWidget(button4, 1);
layout->addWidget(button5, 2, Qt::AlignBottom);
layout->addStretch();
buttonPnl->setLayout(layout);
我还尝试使用QGridLayout并指定每行的高度,但这看起来与前面的示例相同。
QGridLayout *gridLayout = new QGridLayout;
gridLayout->setMargin(15);
gridLayout->setSpacing(15);
gridLayout->addWidget(button1, 0, 0);
gridLayout->addWidget(button2, 1, 0);
gridLayout->addWidget(button3, 2, 0);
gridLayout->addWidget(button4, 3, 0);
gridLayout->addWidget(button5, 5, 0);
gridLayout->setRowStretch(0, 1);
gridLayout->setRowStretch(1, 1);
gridLayout->setRowStretch(2, 1);
gridLayout->setRowStretch(3, 1);
gridLayout->setRowStretch(4, 1);
gridLayout->setRowStretch(5, 1);
如何创建动态布局,以合理的分辨率正确显示按钮?
答案 0 :(得分:0)
有点“ hacky-slash”,但是...获得所需行为的最简单方法可能是定义一个从QPushButton
继承但具有空paintEvent
的spacer类定义...
class spacer: public QPushButton {
using super = QPushButton;
public:
using super::super;
protected:
virtual void paintEvent (QPaintEvent *event) override
{
}
};
然后只需确保使用与其他按钮保持一致的文本字符串实例化它,以使其具有来自sizeHint()
的合适的返回值。因此(根据您自己的示例)...
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
/*
* Add a spacer using the text from button4 as a reference.
*/
layout->addWidget(new spacer(button4->text()));
layout->addWidget(button5);
layout->addStretch();
buttonPnl->setLayout(layout);
这给了我类似...