【问题标题】:How Qt does widget calculate its size?Qt 小部件如何计算其大小?
【发布时间】:2013-05-25 10:28:27
【问题描述】:

当我使用QWidget 设计用户界面时,我总是对它的大小属性感到有些困惑。有size policygeometryhintSize

我只知道size policyhintSize之间的关系:size policy是基于sizehint。但我不知道这些属性之间的其他关系。

我想要一个可以根据父窗口或主窗口大小自动更改大小的小部件。但是我不知道如何利用这三个属性来完成这个目标。

【问题讨论】:

    标签: qt qt4 pyqt


    【解决方案1】:

    几何:小部件在其父级中的当前位置和大小。例如,几何形状为 (10, 20, 50, 70) 的小部件将位于宽度为 50、高度为 70 的父级内的位置 (10, 20)。

    sizeHint:(可能是您所说的“hintSize”)小部件的首选尺寸。覆盖此方法以更改它。

    尺寸政策:当小部件被放置在尺寸与其自身不同的容器中时,它将如何响应。尺寸政策是以下各项的组合:

    • [QSizePolicy::Maximum] 小部件是否可以缩小到其sizeHint 以下
    • [QSizePolicy::Minimum] 小部件是否可以在其sizeHint 上方展开,以及
    • [QSizePolicy::Expanding] 小部件是否应展开以填充额外的可用空间。

    小部件同时具有水平和垂直尺寸策略。


    尽管如此,您可能正在寻找布局,它会根据给定的规则自动调整其父级中的小部件的大小。例如,要使小部件填充其父级,请将父级的布局设置为QVBoxLayout,然后将子小部件添加到布局中。当父级调整大小时,子级将自动调整大小以适应大小。

    【讨论】:

    • 能告诉我geometry和sizeHint的区别吗?如果我设置geometry值,那么sizeHint就没用了?我可以用这种方式理解sizehint和geometry吗?
    • 尺寸策略仅在小部件位于布局中时由 Qt 使用。因此,小部件不在布局中时将忽略其大小策略。 Geometry 将在布局中和不在布局中的小部件上工作。但是,布局中的小部件将在调整父级大小时重新计算其几何形状,因此在这种情况下手动设置几何形状将无法有效工作。当小部件不在布局中时,其大小提示将是其初始大小,随后对 setGeometry 的任何调用都将覆盖其当前大小。
    猜你喜欢
    • 2011-01-26
    • 2013-07-28
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多