我有一个QWidget,它有一个非常cpu密集的绘制事件处理程序。但它几乎不需要更新,虽然它在屏幕上移动。我知道如何实现双缓冲区绘制机制,但由于所有QWidgets都已经有一个双缓冲系统,我很想知道是否可以故意使用它,如下所示:
void ParametersWidget::paintEvent(QPaintEvent *)
{
if(isnt_changed) {
bypassUpdate();
}
else {
drawStuff();
}
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
您不能忽略paint事件,因为您的窗口小部件可能已被另一个窗口覆盖,并且当移动此窗口时,您的窗口小部件需要重新绘制。一种可能的优化是仅绘制脏区域。可以通过调用region()
的{{1}}来获取。没有理由重新绘制整个小部件,只要其中的一部分需要重新绘制。
如果不确切知道您的小部件包含哪些内容,则很难提供更具体的优化提示。如果窗口小部件的内容需要昂贵的数据库查询或大量计算,您当然应确保仅在需要时执行这些操作,保存结果,并在重新绘制期间使用结果。