如何阻止绘制事件传播?

时间:2015-04-07 13:14:17

标签: c++ qt

我有两个小部件,ABAB作为其父级。

A窗口小部件中,我有一个计时器来触发自身的重绘槽。因此,触发了小部件A的paintEvent。但是,我发现B的{​​{1}}也被触发了。我怎么能只触发paintEvent的痛苦?

我试图接受A的{​​{1}}作为:

A

但它没有帮助。我该怎么办?

2 个答案:

答案 0 :(得分:2)

当一个小部件被发送一个paint事件时,它所有启用的子节点也是如此。您可以通过在子窗口小部件上安装事件过滤器并丢弃任何您不想要的绘制事件来解决此问题。

答案 1 :(得分:1)

你不能因为Qt必须组成小部件。

选项:

  • 考虑将窗口小部件设为非子窗口并将其显示为单独的“窗口”。您可以使用Qt::FramelessWindowHintQt::WA_TranslucentBackground将其视为子窗口小部件。此选项将为您提供完美的结果,因为它将组合留给底层操作系统,至少在桌面上,除非有要求,否则不会重绘底部小部件。

  • 考虑缓存。使用QPixmapCache将底部窗口小部件的所有绘图缓存到一个窗口大小的像素图中,在需要时可以非常快速地绘制。