如何在Qt中维护窗口小部件的宽高比以及如何使窗口小部件居中呢?
您不必实现自己的布局管理器.你可以做继承QWidget
和重新实现
int QWidget::heightForWidth( int w ) { return w; }
保持广场 但是,heightForWidth()
对于X11上的顶级窗口不起作用,因为显然X11协议不支持它.至于居中,你可以传递Qt::AlignCenter
第三个参数QBoxLayout::addWidget()
或第五个参数QGridLayout::addWidget()
.
注意:至少在Qt的较新版本中,QWidget不具有heightForWidth
或widthForHeight
不再(因此它们不能被覆盖),因此setWidthForHeight(true)
或setHeightForWidth(true)
仅对QGraphicsLayout的后代有效.
正确的答案是创建自定义布局管理器.这可以通过继承QLayout来实现.
在Qt @ Forum Nokia维护小部件的方形表格
在Qt @ Forum Nokia中实现布局管理器
编写自定义布局管理器@ Qt文档
resize()
从内部调用resizeEvent()
从来没有对我有用 - 最好它会导致闪烁,因为窗口调整大小两次(就像你有),最坏的情况是无限循环.
我认为维持固定宽高比的"正确"方法是创建自定义布局.你必须只重写两个方法,QLayoutItem::hasHeightForWidth()
并且QLayoutItem::heightForWidth()
.