Qt 在布局中等距放置按钮,但有一个空插槽
我正在尝试创建一个按钮面板,其中包含4个按钮、一个空格和另一个按钮,所有按钮的空格相等,如下所示: 我曾经尝试过使用,但似乎这些都需要特定的高度和重量,我希望这个布局足够动态,能够正确地显示在任何分辨率上,所以固定大小的间隔将不起作用 我试着按照下面的代码,但这只是将前4个按钮挤压到顶部,最后一个按钮挤压到底部,并且没有将它们均匀地隔开Qt 在布局中等距放置按钮,但有一个空插槽,qt,layout,qpushbutton,qlayout,Qt,Layout,Qpushbutton,Qlayout,我正在尝试创建一个按钮面板,其中包含4个按钮、一个空格和另一个按钮,所有按钮的空格相等,如下所示: 我曾经尝试过使用,但似乎这些都需要特定的高度和重量,我希望这个布局足够动态,能够正确地显示在任何分辨率上,所以固定大小的间隔将不起作用 我试着按照下面的代码,但这只是将前4个按钮挤压到顶部,最后一个按钮挤压到底部,并且没有将它们均匀地隔开 QVBoxLayout *layout = new QVBoxLayout; layout->setMargin(15); layout->set
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);
我如何才能创建一个动态布局,以任何合理的分辨率正确显示我的按钮?这有点“粗斜杠”,但。。。获得所需行为的最简单方法可能是定义一个间隔类,该间隔类继承自
QPushButton
,但具有空的paintEvent
定义
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);