2

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

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

任何帮助,将不胜感激。

4

1 回答 1

0

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

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

于 2015-04-28T18:40:59.970 回答