我得到一个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::AlignCenter = Qt::AlignVCenter + Qt::AlignHCenter
.
请注意,如果你设置任何类型的对齐,那么你说你想要首选的大小(什么sizeHint返回),但对象应该以适当的方式定位。当你想要填充整个空间时,对齐就没有意义了。
所以我怀疑你所描述的行为是这样设计的。
题外话:注意QGraphicsWidgets有3个sizeHints:最小,首选和最大,所以在这种情况下,当一些对齐扩展大小策略仍然适用,因为有最大尺寸的小部件可以占用