gpt4 book ai didi

c++ - 如何限制QLayout增长?

转载 作者:行者123 更新时间:2023-11-28 04:32:09 27 4
gpt4 key购买 nike

我有一个带有 QHBoxLayout 的 QWidget(窗口),其中包含两个 QPushButton。如果我将窗口变大(非常宽),会发生两件事:

  1. 按钮增长到最大宽度
  2. 按钮之间和周围的空间也变大了。

但我需要另一种行为:

  1. 小部件可以像往常一样增长和缩小
  2. 按钮之间和按钮周围的空间不应增大(必须保持不变)。
  3. 当按钮达到最大宽度时,必须限制小部件进一步增长

如何达到上述行为?

更新:

我建议使用以下代码:

int main(int argc, char* argv[])
{
QApplication app(argc, argv);

QWidget wgt;

QPushButton* button1 = new QPushButton("Button1");
QPushButton* button2 = new QPushButton("Button2");

button1->setMinimumSize(150, 100);
button1->setMaximumSize(250, 100);
button2->setMinimumSize(150, 100);
button2->setMaximumSize(250, 100);

QHBoxLayout* pLayout = new QHBoxLayout(&wgt);
pLayout->addWidget(button1);
pLayout->addWidget(button2);

wgt.setLayout(pLayout);

wgt.setGeometry(400, 400, 800, 300);
wgt.show();

return app.exec();
}

我需要将布局限制在最小值和最大值之间(不能小于最小值且不能大于最大值)+ 不拉伸(stretch)按钮之间和按钮周围的空间(它必须具有固定大小)。

最佳答案

原因

调整窗口大小时,必须有一些东西占用可用空间。由于按钮本身的大小受到限制,因此它们之间的空间会变大。

解决方案

我建议您添加一个不可见的小部件作为占位符。然后相应地调整布局的间距。

例子

这是我为您准备的示例,说明如何更改代码以达到预期效果:

QHBoxLayout* pLayout = new QHBoxLayout(&wgt);
pLayout->addWidget(button1);
pLayout->addSpacing(6);
pLayout->addWidget(button2);
pLayout->addWidget(new QWidget());
pLayout->setSpacing(0);

替代方案

为了限制小部件的大小,使用 QWidget::setMinimumSizeQWidget::setMaximumSize :

wgt.setMinimumSize(button1->minimumWidth()
+ button2->minimumWidth()
+ pLayout->contentsMargins().left()
+ pLayout->contentsMargins().right()
+ pLayout->spacing(),
button1->minimumHeight()
+ pLayout->contentsMargins().top()
+ pLayout->contentsMargins().bottom()
+ pLayout->spacing());
wgt.setMaximumSize(button1->maximumWidth()
+ button2->maximumWidth()
+ pLayout->contentsMargins().left()
+ pLayout->contentsMargins().right()
+ pLayout->spacing(),
button1->maximumHeight()
+ pLayout->contentsMargins().top()
+ pLayout->contentsMargins().bottom()
+ pLayout->spacing());

如果您事先知道确切的尺寸,这可以简化为:

wgt.setMinimumWidth(324);
wgt.setMaximumWidth(524);
wgt.setFixedHeight(118);

关于c++ - 如何限制QLayout增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52597899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com