如何在未选择的选项卡中的 QTabWidget 中绘制 Qt 小部件?

问题描述

我的 QTabWidget 在启动时有 2 个标签

  • 标签 1 是在启动时打开的标签
  • 选项卡 2 包含一些小部件,我将其中的 QSize 用于稍后在新打开的选项卡中绘制类似元素。

问题是当前元素的大小为 640x480(显然是认值),如果选项卡 2 尚未显示。选择选项卡 2 后,元素将被“绘制”并根据分辨率、窗口大小等获取它们的大小。
如何在不打开选项卡 2 的情况下强制在背景中绘制元素,以便在打开选项卡时获得元素的大小? repaintupdate 不这样做。

我目前的解决方法是在打开标签 2 的情况下启动,然后在 main.cppmyWindow.show()间的 myApp.exec() 中切换到标签 1,但这似乎有点脏。

解决方法

出于性能原因,在实际布局和显示 QWidget 之前,不能保证 QWidget 的 size() 方法返回其预期值。

如果您需要提前知道 QWidget 的尺寸,您可以调用它的 sizeHint() 方法,这将强制立即执行计算,以便即使尚未计算,也可以返回正确的大小。

,

根据Document,当小部件不可见并且还有paintEvent 时,从未调用过resizeEvent。这是减少处理工作量和减少渲染过程的正常例程。如果您想知道 tab1 何时调整大小,请重新实现(覆盖)resizeEvent 并告诉 tab2 必须调整大小。