【问题标题】:How to draw Qt widgets in a QTabWidget in non-selected tabs?如何在未选择的选项卡中的 QTabWidget 中绘制 Qt 小部件?
【发布时间】:2021-05-12 11:22:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 标签 2 小部件是否有布局?
  • 我想你可能想打电话给sizeHint()而不是size()
  • @JeremyFriesner 谢谢,这行得通,如果你想回答我会接受的,

标签: c++ qt qtwidgets


【解决方案1】:

根据Document,当小部件不可见以及paintEvent 时,从未调用resizeEvent。这是减少处理工作和减少渲染过程的正常例程。如果您想知道 tab1 何时调整大小,reimplement(override) resizeEvent 并说 tab2 必须调整大小。

【讨论】:

  • 感谢 resizeEvent 提供的信息。但我不想知道标签何时调整大小,而是如何 强制第一次调整大小。已经指出 sizeHint() 在这里有效。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多