如何使用 qwidget 双缓冲区



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

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

任何帮助将不胜感激。

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

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

最新更新