问题描述
我的 QTabWidget
在启动时有 2 个标签。
问题是当前元素的大小为 640x480(显然是默认值),如果选项卡 2 尚未显示。选择选项卡 2 后,元素将被“绘制”并根据分辨率、窗口大小等获取它们的大小。
如何在不打开选项卡 2 的情况下强制在背景中绘制元素,以便在打开选项卡时获得元素的大小? repaint
和 update
不这样做。
我目前的解决方法是在打开标签 2 的情况下启动,然后在 main.cpp
和 myWindow.show()
之间的 myApp.exec()
中切换到标签 1,但这似乎有点脏。
解决方法
出于性能原因,在实际布局和显示 QWidget 之前,不能保证 QWidget 的 size()
方法返回其预期值。
如果您需要提前知道 QWidget 的尺寸,您可以调用它的 sizeHint()
方法,这将强制立即执行计算,以便即使尚未计算,也可以返回正确的大小。
根据Document,当小部件不可见并且还有paintEvent 时,从未调用过resizeEvent。这是减少处理工作量和减少渲染过程的正常例程。如果您想知道 tab1 何时调整大小,请重新实现(覆盖)resizeEvent 并告诉 tab2 必须调整大小。