2

两年来我一直在深入研究 Qt 布局系统。在此之后,我遇到了 SizePolicies 和 Layouts 的大量问题。我通常会找到解决方案,但从来没有真正理解我在做什么。

现在我花了一些时间来尝试正确理解并为他们构建一个 101 指南并且永远不会失败。我在关于 QWidget 的 QSizePolicy 的文档中找到了这条信息:

此属性保存小部件的默认布局行为

如果有一个 QLayout 管理这个小部件的孩子,则使用该布局指定的大小策略。如果没有这样的 QLayout,则使用此函数的结果。

例如,我认为如果您有一个 QLabel,并且您将策略设置为水平扩展、垂直固定,那么标签本身就会改变这种方式。但它根本没有。

阅读时,我看到它在布局中谈论它的孩子。那么它是什么意思呢?标签内没有任何内容,这就是它不起作用的原因吗?

如何在 QFrame 中插入标签,并告诉框架正在扩展... QFrame 会扩展或拉伸(取决于同一布局中的其他兄弟小部件)还是标签会扩展或拉伸,而不是 QFrame?

真是一团糟...

拉伸呢?如果在添加小部件时设置拉伸 10:

layout->addwidget(label, 10, Qt::AlignHCenter);

它也不起作用。

添加小部件时拉伸 0 意味着:采用我告诉你的政策。默认值,取决于小部件的类型。类似按钮的小部件具有扩展固定功能。盒状扩展-扩展...

Stretch 10 表示:最大增长。

我对吗?出色地。当内部有 QFrame 和 QLabel 时,将 Expanding 和 10 设置为拉伸到标签不起作用。

4

1 回答 1

0

我不明白你所有的问题,所以我只会回答那些我认为我会的。

  • 例如,我认为如果您有一个 QLabel,并且您将策略设置为水平扩展、垂直固定,那么标签本身就会改变这种方式。但它根本没有。

我不知道那是什么意思。您期望的确切行为是什么,实际发生了什么?这个标签在布局中吗?此布局中是否还有其他小部件?

  • 如何在 QFrame 中插入标签,并告诉框架正在扩展......

如果您QSizePolicyQFrame对象设置 a 并为其设置布局,则此大小策略可能会被忽略。Docs如果有一个 QLayout 管理这个小部件的孩子,则使用该布局指定的大小策略。如果没有这样的 QLayout,则使用此函数的结果。这意味着小部件的布局应该管理小部件的大小。请注意,它仍然会尊重最小/最大宽度/高度值。

  • Stretch 10 表示:最大增长。

什么让你有那个想法?。拉伸因子取决于布局内的其他小部件。Docs拉伸因子用于更改按比例分配的空间小部件。

  • 当内部有 QFrame 和 QLabel 时,将 Expanding 和 10 设置为拉伸到标签不起作用。

不工作怎么办?如果您将拉伸设置为QFrame1 和QLabel10,则您的QLabel对象应始终是对象的 10 倍宽/高(取决于您的布局类型)QFrame。如果您的 QFrame 有一个布局并且它包含子级,那么这可能不起作用,因为它取决于子级的大小策略。

于 2014-01-30T10:04:39.517 回答