【发布时间】:2017-04-09 12:27:28
【问题描述】:
我正在尝试使用最新版本的 Qt 解决图形问题。下图显示了我到目前为止所取得的成果,我将用它来解释预期的结果。
我正在使用主要的垂直布局,并且在布局的最大小部件中,有一个只有一个子元素的水平布局:方形小部件。预期的行为当然是让方形小部件水平居中并占用最大的可用空间。不需要使用相同的布局配置,但界面的外观应该相同。
上面的图像是通过将垂直和水平方向的 QSizePolicy 设置为方形小部件并使用以下代码强制它为方形来获得的:
void SquareWidget::resizeEvent(QResizeEvent *event) {
//This is an override to the QWidget method
QSize s = size();
if (s.height()<s.width()) {
resize(s.height(), s.height());
} else {
resize(s.width(), s.width());
}
return;
}
在尝试解决此问题时,我浏览了该网站上的一些答案的文档,但找不到有关如何执行两项任务的明确答案。
第一个问题:如何使小部件呈正方形并保持其纵横比?
据说heightForWidth()方法在较新版本的qt中不起作用,经过测试对我也不起作用。另一方面,上面对 resizeEvent 的覆盖会导致递归,因为调用了 resize() (据我了解,布局应该处理调整大小)。
第二个问题:如何使正方形居中?
我尝试使用布局对齐属性(水平和垂直居中),但它们会导致小部件大小不可变。
也许我不了解 Qt 如何处理小部件放置。任何建议或澄清将不胜感激。
【问题讨论】:
-
关于“heightForWidth 不起作用”,请查看答案的日期:8 年前。这些天 QWidget 有它:doc.qt.io/qt-5/qwidget.html#hasHeightForWidth
-
@peppe 谢谢你的信息。如果我使用 heightforwidth 方法,那不会导致居中问题吗?