【问题标题】:Qt layout problemQt布局问题
【发布时间】:2010-04-30 21:59:57
【问题描述】:

我有以下 Qt 代码:

QVBoxLayout* box = new QVBoxLayout;
label = new QLabel(); // will be set later dynamically
box->addWidget (label);

标签中的文本将在稍后设置。 问题是当标签调整大小时,它会调整 QVBoxLayout 的大小,并且会调整其他相邻小部件的大小。 我不想让标签或布局固定宽度。因为我希望他们用整个窗口调整大小。

是否可以告诉一个小部件占据它在布局中的所有位置,但不能更多?

【问题讨论】:

  • 你能提供一个完整的例子吗?

标签: c++ qt layout


【解决方案1】:

您是否尝试过修改小部件的size policy?你可以用它来完成你想要的。

以下是所有尺寸政策:http://qt.nokia.com/doc/4.6/qsizepolicy.html#Policy-enum

【讨论】:

  • 哪个策略能实现我想要的?
  • 使用 QSizePolicy::Maximum 策略并将标签的 sizeHint 设置为布局空间大小。所以标签将被限制在它在布局中的空间内。
【解决方案2】:

您可以设置maximumSize 或查看sizePolicy

【讨论】:

  • 正如我所说,我不想设置最大尺寸。我之前深入了解了 size policy,但不知道如何使用它。
【解决方案3】:

我认为您需要为要放置布局的主窗口设置拉伸因子 (setStrechFactor)。

【讨论】:

  • 好主意。我将主布局中框和其他小部件的StretchFactor设置为0。但没有效果:(
  • 将拉伸因子设置为 0 意味着布局拉伸是根据其他小部件自动计算的。例如,如果您在布局中有一个按钮和一个标签,并将每个元素的拉伸因子设置为 0,那么每个小部件的大小都会自动分配。如果你设置 100;1;作为拉伸因子,小部件的大小将有 100 的比例。
【解决方案4】:

也许你可以看看以下方法:

- void setScaledContents(bool)
- void setWordWrap(bool on)

我希望它符合您的要求!

【讨论】:

    【解决方案5】:

    Łukasz,我是否正确理解您希望标签一直填充一行的空间?如果是这样,如果文本只有一行,那么解决方案就是:

    QVBoxLayout* box = new QVBoxLayout;
    label = new QLabel(" "); // The space will create a vertical space in the layout
    box->addWidget (label);

    “空”标签现在的行为与您设置文本后的行为完全相同。

    但我必须承认,我不确定我是否真正理解了你的问题。您能否更具体一些,或者提供您想要完成的任务的屏幕截图?

    【讨论】:

      猜你喜欢
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多