【问题标题】:Qt - Centering 'MinimumExpanding' widgets in a layoutQt - 在布局中居中“MinimumExpanding”小部件
【发布时间】:2013-02-12 00:57:30
【问题描述】:

我有一个QHBoxLayout,其中包含 2 个QWidgets。这两个QWidgets 都具有固定的纵横比(正方形),并且通过这样做具有最小扩展QSizePolicy

QSizePolicy policy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
policy.setHeightForWidth(true);
setSizePolicy(policy);

并像这样实现heightForWidth

virtual int heightForWidth (int w) const override {
    return w;
}

现在,我希望这些小部件在我的布局中居中。因此,我将它们添加到这样的布局中:

layout->addWidget(widget1, 0, Qt::AlignCenter);

但是,像这样,它们最终会以自己喜欢的大小结束,但不会占用所有可用空间。这是为什么?好像 Qt::AlignCenter 覆盖了我的 SizePolicy?!

相比之下,使用Qt::AlignVCenter 实际上会使它们占据所有可用空间。它是如何组合在一起的?

谢谢!

【问题讨论】:

    标签: qt user-interface


    【解决方案1】:

    请注意Qt::AlignCenter = Qt::AlignVCenter + Qt::AlignHCenter.
    请注意,如果您设置任何类型的对齐方式,那么您就是说您想要首选大小(sizeHint 返回的内容)但对象应该以正确的方式定位。当你想填满整个空间时,对齐就没有意义了。
    所以我怀疑你描述的行为就是这样设计的。

    题外话:请注意,QGraphicsWidgets 有 3 个 sizeHints:最小、首选和最大,因此在这种情况下,当一些对齐扩展尺寸策略仍然适用时,因为有最大尺寸的小部件可以占据。

    【讨论】:

    • 谢谢!所以这就是“功能性”……我只是不认为这是人们想要的,是吗?此外,我在文档中的任何地方都找不到它禁用调整大小。无论如何,再次感谢!
    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2020-05-05
    • 2019-12-23
    • 2017-10-13
    • 2014-08-12
    • 2014-12-17
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多