如何在未选择的选项卡中的 QTabWidget 中绘制 Qt 小部件?
How to draw Qt widgets in a QTabWidget in non-selected tabs?
我的 QTabWidget
在启动时有 2 个标签。
- 标签 1 是启动时打开的标签。
- 选项卡 2 包含一些小部件,我使用这些小部件
QSize
稍后在新打开的选项卡中绘制类似的元素。
问题是,如果选项卡 2 尚未显示,当前元素的大小为 640x480(显然是默认值)。选择选项卡 2 后,将“绘制”元素并根据分辨率、window 大小等获取它们的大小。
如何在不打开选项卡 2 的情况下强制在后台绘制元素,以便我可以获得打开选项卡时元素的大小? repaint
和 update
不这样做。
我目前的解决方法是在 myWindow.show()
和 myApp.exec()
之间的 main.cpp
中打开选项卡 2 并切换到选项卡 1,但这似乎有点脏。
根据 Document 当小部件不可见时从未调用过 resizeEvent 以及 paintEvent。这是减少处理工作量和减少渲染过程的正常例程。如果您想知道 tab1 何时调整大小,请重新实现(覆盖)resizeEvent 并告诉 tab2 必须调整大小。
出于性能原因,QWidget 的 size()
方法不能保证 return 它的预期值,直到 QWidget 实际布局和显示之后。
如果您需要提前知道 QWidget 的大小 是 ,您可以调用它的 sizeHint()
方法,这将强制执行计算马上,这样就可以 return 编辑正确的大小,即使它还没有计算出来。
我的 QTabWidget
在启动时有 2 个标签。
- 标签 1 是启动时打开的标签。
- 选项卡 2 包含一些小部件,我使用这些小部件
QSize
稍后在新打开的选项卡中绘制类似的元素。
问题是,如果选项卡 2 尚未显示,当前元素的大小为 640x480(显然是默认值)。选择选项卡 2 后,将“绘制”元素并根据分辨率、window 大小等获取它们的大小。
如何在不打开选项卡 2 的情况下强制在后台绘制元素,以便我可以获得打开选项卡时元素的大小? repaint
和 update
不这样做。
我目前的解决方法是在 myWindow.show()
和 myApp.exec()
之间的 main.cpp
中打开选项卡 2 并切换到选项卡 1,但这似乎有点脏。
根据 Document 当小部件不可见时从未调用过 resizeEvent 以及 paintEvent。这是减少处理工作量和减少渲染过程的正常例程。如果您想知道 tab1 何时调整大小,请重新实现(覆盖)resizeEvent 并告诉 tab2 必须调整大小。
出于性能原因,QWidget 的 size()
方法不能保证 return 它的预期值,直到 QWidget 实际布局和显示之后。
如果您需要提前知道 QWidget 的大小 是 ,您可以调用它的 sizeHint()
方法,这将强制执行计算马上,这样就可以 return 编辑正确的大小,即使它还没有计算出来。