如何使用qwidget双缓冲区

时间:2015-04-28 14:59:58

标签: qt qwidget doublebuffered paintevent

我有一个QWidget,它有一个非常cpu密集的绘制事件处理程序。但它几乎不需要更新,虽然它在屏幕上移动。我知道如何实现双缓冲区绘制机制,但由于所有QWidgets都已经有一个双缓冲系统,我很想知道是否可以故意使用它,如下所示:

 void ParametersWidget::paintEvent(QPaintEvent *)
 {
   if(isnt_changed) {
      bypassUpdate();
   }
   else {
     drawStuff();
   }
 }

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您不能忽略paint事件,因为您的窗口小部件可能已被另一个窗口覆盖,并且当移动此窗口时,您的窗口小部件需要重新绘制。一种可能的优化是仅绘制脏区域。可以通过调用region()的{​​{1}}来获取。没有理由重新绘制整个小部件,只要其中的一部分需要重新绘制。

如果不确切知道您的小部件包含哪些内容,则很难提供更具体的优化提示。如果窗口小部件的内容需要昂贵的数据库查询或大量计算,您当然应确保仅在需要时执行这些操作,保存结果,并在重新绘制期间使用结果。