Qt创建者:Qwidget的paintEvent

时间:2016-01-14 10:39:27

标签: c++ qt qt4

我有一些问题。希望有人能帮助我。 我有一个Qwidget1和Qwidget2。 Qwidget1有一个小部件,可以升级到Qwidget2。 Qwidget1和Qwidget2都有paintEvent。我在Qwidget1的paint事件中写了“qDebug()<<”Update“;”。当我运行项目时,我看到一个单词“更新”已被打印很多次。那么为什么Qwidget1会多次执行绘制事件。我该如何修复它,只是在第一次显示Qwidget1时以及当我调用update时执行paint事件。

2 个答案:

答案 0 :(得分:0)

这是预期的行为。你的代码就像应该的那样工作。从Qt文档:

  

绘制事件是重新绘制全部或部分窗口小部件的请求。它可以   发生的原因有以下几种:

     

调用了repaint()或update(),

     

小部件被遮挡,现在已被发现,

     

或许多其他原因。

答案 1 :(得分:0)

当窗口或其部件失效并且必须重新绘制时,可能存在任何数量的情况。这种情况包括但不限于:

  • 窗口大小更改(包括最小化/最大化/恢复窗口);
  • 鼠标指针在窗口小部件上传递 - 它可能会也可能不会触发重绘;
  • 在有问题的窗口上移动的其他窗口。

当它发生时,Windows会将WM_PAINT消息发送给应用程序。您可以检查收到的WM_PAINT消息的数量是否与paintEvent个呼叫的数量相匹配,但我怀疑Qt会增加任何重大开销。