Qt - 在布局中居中“MinimumExpanding”小部件

时间:2013-02-26 14:20:43

标签: qt user-interface

我收到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实际上会使它们占用所有可用空间。这是如何组合在一起的?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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