我收到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
实际上会使它们占用所有可用空间。这是如何组合在一起的?
谢谢!
答案 0 :(得分:1)
请注意Qt::AlignCenter = Qt::AlignVCenter + Qt::AlignHCenter
请注意,如果您设置任何类型的对齐,那么您说您想要首选大小(sizeHint返回),但对象应以正确的方式定位。当你想要填满整个空间时,那么对齐是没有意义的
所以我怀疑你所描述的行为是这样设计的。
Digression:请注意,QGraphicsWidgets有3个sizeHints:最小,首选和最大,因此在这种情况下,当某些对齐扩展大小策略仍然适用时,因为小部件可以占用最大大小。