当前位置:  开发笔记 > 编程语言 > 正文

如何在Qt中维护小部件的宽高比?

如何解决《如何在Qt中维护小部件的宽高比?》经验,为你挑选了3个好方法。

如何在Qt中维护窗口小部件的宽高比以及如何使窗口小部件居中呢?



1> Marc Mutz - ..:

您不必实现自己的布局管理器.你可以做继承QWidget和重新实现

int QWidget::heightForWidth( int w ) { return w; }

保持广场 但是,heightForWidth()对于X11上的顶级窗口不起作用,因为显然X11协议不支持它.至于居中,你可以传递Qt::AlignCenter第三个参数QBoxLayout::addWidget()或第五个参数QGridLayout::addWidget().

注意:至少在Qt的较新版本中,QWidget不具有heightForWidthwidthForHeight不再(因此它们不能被覆盖),因此setWidthForHeight(true)setHeightForWidth(true) 仅对QGraphicsLayout的后代有效.


如果我想设置widthForHeight怎么办?QWidget没有`widthForHeight`方法.
那么如何在新的Qt版本中做到这一点?

2> Bleadof..:

正确的答案是创建自定义布局管理器.这可以通过继承QLayout来实现.

子类化QLayout时实现的方法

void addItem(QLayoutItem*item);
将项添加到布局.
int count()const;
返回项目计数.
QLayoutItem*itemAt(int index)const;
返回索引处的项引用,如果没有则返回0.
QLayoutItem*takeAt(int index);
从索引中获取并返回布局中的项目,如果没有则返回0.
Qt :: Orientations expandingDirections()const;
返回展开方向的布局.
bool hasHeightForWidth()const;
判断布局是否处理宽度计算的高度.
QSize minimumSize()const;
返回布局的最小大小.
void setGeometry(const QRect&rect);
设置布局的几何形状及其中的项目.在这里,您必须保持纵横比并进行居中.
QSize sizeHint()const;
返回布局的首选大小.

进一步阅读

在Qt @ Forum Nokia维护小部件的方形表格

在Qt @ Forum Nokia中实现布局管理器

编写自定义布局管理器@ Qt文档


所有链接都已死亡.

3> dF...:

resize()从内部调用resizeEvent()从来没有对我有用 - 最好它会导致闪烁,因为窗口调整大小两次(就像你有),最坏的情况是无限循环.

我认为维持固定宽高比的"正确"方法是创建自定义布局.你必须只重写两个方法,QLayoutItem::hasHeightForWidth()并且QLayoutItem::heightForWidth().

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有