1
我有一个QWidget,它有一个非常强大的CPU事件处理程序。但它几乎不需要更新,虽然它在屏幕上移动。我知道如何实现双缓冲油漆机制,但因为所有QWidgets已经拥有了双缓冲系统,我很好奇,想看看是不是可以使用它的目的,这样的事情:如何使用qwidget双缓冲区
void ParametersWidget::paintEvent(QPaintEvent *)
{
if(isnt_changed) {
bypassUpdate();
}
else {
drawStuff();
}
}
任何帮助将不胜感激。
以及这与我的问题有何关系,关于双缓冲? –
你提到你有一个非常CPU的油漆处理程序,我想你想尝试提高性能。当我读到你的问题时,我的印象是你认为双缓冲可以帮助你达到目的,但双缓冲与性能无关(只有闪烁)。如果您对如何提高性能不感兴趣,请忽略我的答案。对于双缓冲,你不需要做任何事情。 Qt自Qt 4.0以后自动为你做。 –
看,让我解释一下。正如你所说的那样,Qt会自动进行双缓冲。这意味着它将我的小部件的快照作为像素图存储在RAM中,并且在决定时渲染它而不是调用我的小部件的绘图函数。现在考虑它已经收到一个更新信号并且调用了paint函数,但是我的小部件知道它不需要更新。显然,我可以保留最后一个paint的pixmap并重新渲染它,但是我想看看是否有方法使用内置的缓冲pixmap,而不是手动将其保存在额外的缓冲区中。 –