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,而不是手動將其保存在額外的緩衝區中。 –