2016-01-14 101 views
0

我有一些问题。希望任何人都可以帮助我。 我有一个Qwidget1和Qwidget2。 Qwidget1有一个小工具可以推广到Qwidget2。 Qwidget1和Qwidget2都有paintEvent。我写了“qDebug()< <”更新“;”在Qwidget1的绘画事件中。当我运行项目时,我看到一个单词“更新”已经打印了很多次。那么为什么Qwidget1会多次执行绘制事件。我该如何修复它,只需在第一次显示Qwidget1时以及我打电话更新时执行绘画事件。Qt创建者:Qwidget的paintEvent

+0

这里没有什么坏的。 –

+0

请告诉我原因。 – LeHuuTien

回答

0

这是预期的行为。你的代码工作就像它应该。来自Qt文档:

绘画事件是重绘全部或部分小部件的请求。它可以 发生由于以下原因之一:

重绘()或update()被调用,

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

或许多其他原因。

0

当窗口或其部件失效并且必须重新绘制时,可能有多种情况。这些情况包括但不限于:

  • 窗口大小变化(包括最小化/最大化/恢复窗口);
  • 鼠标指针经过一个小部件 - 它可能会或可能不会触发重绘;
  • 其他窗口在窗口上移动。

发生这种情况时,Windows会将WM_PAINT消息发送给应用程序。您可以检查收到的WM_PAINT消息的数量是否与paintEvent调用的数量相匹配,但是我怀疑Qt是否会增加任何显着的开销。

+0

不更改窗口大小,没有鼠标指针经过窗口小部件,也没有其他窗口在窗口上移动。当我删除Qwidget2的绘画事件时,我看到Qwidget1的绘画事件只执行一次。 – LeHuuTien