首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制QLayout的生长?

如何限制QLayout的生长?
EN

Stack Overflow用户
提问于 2018-10-01 19:47:27
回答 1查看 290关注 0票数 1

我有一个QWidget (窗口)和QHBoxLayout,其中包含两个QPushButtons。如果我把窗户变大(非常宽),就会发生两件事:

  1. 这些按钮最大的宽度。
  2. 按钮之间和周围的空间也在增长。

但我需要另一种行为:

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

如何达到上述行为?

UPD:

我建议采用以下守则:

代码语言:javascript
复制
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();
}

我需要的布局应该限制从最小到最大(不能少于分钟,不能大于最大)+不拉伸空间(它必须有固定的大小)之间和周围的按钮。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 14:06:42

原因

当窗口被调整大小时,某些东西必须占用可用的空间。由于按钮本身的大小受到限制,它们之间的空间也随之增大。

解决方案

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

示例

下面是我为您准备的如何更改代码以达到预期效果的示例:

代码语言:javascript
复制
QHBoxLayout* pLayout = new QHBoxLayout(&wgt);
pLayout->addWidget(button1);
pLayout->addSpacing(6);
pLayout->addWidget(button2);
pLayout->addWidget(new QWidget());
pLayout->setSpacing(0);

替代解

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

代码语言:javascript
复制
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());

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

代码语言:javascript
复制
wgt.setMinimumWidth(324);
wgt.setMaximumWidth(524);
wgt.setFixedHeight(118);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52597899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档