我想將Qt應用程序圖像實時傳輸到其他設備。 所以我需要渲染MainScreen小部件及其所有內容,並將其作爲位圖傳遞給某個通信通道。在Qt中渲染離線幀
我想最大限度地減少電話數量渲染,因爲它是CPU昂貴,但我也希望能夠選擇在UI中的所有更改。
所以我試圖把QWidget->渲染命令的paintEvent裏面,卻引起遞歸重繪錯誤。
抓取應用程序框架時沒有遞歸重繪錯誤的最佳方式是什麼?
我想將Qt應用程序圖像實時傳輸到其他設備。 所以我需要渲染MainScreen小部件及其所有內容,並將其作爲位圖傳遞給某個通信通道。在Qt中渲染離線幀
我想最大限度地減少電話數量渲染,因爲它是CPU昂貴,但我也希望能夠選擇在UI中的所有更改。
所以我試圖把QWidget->渲染命令的paintEvent裏面,卻引起遞歸重繪錯誤。
抓取應用程序框架時沒有遞歸重繪錯誤的最佳方式是什麼?
它可能不是最好的解決方案,但如果它已被調用,則可以通過跳過render()
調用來中斷遞歸。
void paintEvent() {
...
if(! m_rendering) { // m_rendering must be class member variable
m_rendering = true;
render();
m_rendering = false;
return;
}
...
}
但要注意的是,如果MainScreen
的paintEvent()
叫你只會渲染。所以你很可能會錯過一個子部件的重繪。您可以通過使用QTimer
受控update()
調用來解決此問題。具體取決於您需要的幀速率。
這可能是可能的解決方案,我會嘗試。 – Alex
是[QWidget :: grab](http://doc.qt.io/qt-5/qwidget.html#grab)不是你在找什麼? –
這是抓住一個框架的另一個功能,但正如我所提到的問題是它的激活時機。如果計時器很慢,按計時器激活它可能會導致丟失事件,或者在計時器太快時導致開銷過大。從paintEvent激活導致遞歸重繪錯誤。 – Alex