QWidget 报告错误的宽度值

Posted

技术标签:

【中文标题】QWidget 报告错误的宽度值【英文标题】:QWidget reports wrong width value 【发布时间】:2013-02-18 19:17:24 【问题描述】:

我想查询一个小部件的宽度来进行一些自定义布局管理。不幸的是,无论小部件实际有多大或多小,以下代码都会返回 640

int myWidth = this->rect().size().width();  // "this" is my class derived from QWidget
// myWidth is set to 640

编辑:

int myWidth = this->width() 返回相同的 640

【问题讨论】:

为什么不只是int myWidth = this->width(); 您是在小部件显示之前还是之后调用此函数? 您是否尝试在您的小部件上调用sizeHintadjustSize 感谢@Chris,渲染后调用函数给了我正确的宽度。我目前在构造函数中使用单次计时器实现了这一点。但是有没有办法知道小部件何时被渲染? 您不需要重新实现sizeHintadjustSize。如果你调用sizeHint,它可以计算出它的渲染大小的一些计算,当你要求它的rect()->size()->width()时。调用adjustSize 是另一种告诉小部件更新其几何形状的方法,以获取在其中调整大小的元素或已添加的元素。 【参考方案1】:

进行特殊布局管理的正确位置被覆盖resizeEvent。此时小部件的大小是确定的(通常由父小部件的布局,基于size hint 和size policy)。它也保证在第一次显示小部件之前被调用。记住也要调用超类resizeEvent,至少如果您的布局中有子小部件。

【讨论】:

以上是关于QWidget 报告错误的宽度值的主要内容,如果未能解决你的问题,请参考以下文章

创建 QWidget 宽度 HWND 父级

QWidget 调整大小问题

Pyqt5_QWidget

Qt : Qwidget 大小

使 QWidget 的一部分可拖动

带有 QWidget 的分段错误构造函数。 Qt/C++