1

我有一个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实际上会使它们占据所有可用空间。这怎么搭配?

谢谢!

4

1 回答 1

1

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

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

于 2013-02-26T14:39:00.860 回答