代码之家  ›  专栏  ›  技术社区  ›  dF.

在qt4中,如何检查paintevent是否由调整大小触发?

  •  4
  • dF.  · 技术社区  · 15 年前

    在qt4应用程序中,是否可以在 paintEvent() 处理程序重绘是否由调整大小触发?

    我有一个小部件,它的重绘速度非常慢(一个复杂的绘图),我想通过一个调整过大小的pixmap来加速尺寸调整。 虽然 小部件正在调整大小,只有在调整大小完成后才重新绘制小部件。

    我试过在 resizeEvent() 但这似乎行不通 画图事件() )

    3 回复  |  直到 15 年前
        1
  •  6
  •   LukáÅ¡ Lalinský    15 年前

    我觉得你做不容易。很难判断什么时候开始/停止调整大小,特别是在跨平台方式下。我可能会有一个由 resizeEvent 将图像渲染到 QPixmap .如果你得到另一个 调整事件大小 当计时器仍处于活动状态时,只需重新启动它。在 paintEvent 始终绘制当前的PixMap,在从计时器呈现新的PixMap后,调用 update() 在小部件上。不是一个理想的解决方案,但它应该有效。

        2
  •  3
  •   Paul Dixon    15 年前

    您可以采用的一种方法是始终绘制pixmap,但是如果窗口大小发生了变化,请记住“很快”重新创建pixmap。

    因此,当paintEvent出现时,如果大小与当前的pixmap大小不同,则无论如何都要绘制存储的pixmap,但要设置(或重置)a QTimer 触发一个信号到一个插槽,将刷新pixmap。

    当这个刷新方法运行时,它将重新呈现pixmap并请求刷新小部件。

        3
  •  1
  •   ChristopheD    15 年前

    另一种可能是看看 QMdiSubWindow::RubberBandResize 是在内部实现的,它可以提供如何实现这一点的提示。只有当我正确调用时,它才能在qmdisubwindow上工作-它在调整大小期间“停止”绘制(带有透明主体的小窗口边框除外),并在停止调整窗口大小时激发一个最终的ResizeEvent(触发更新/绘制)。