2016-04-14 46 views
0

我想將Qt應用程序圖像實時傳輸到其他設備。 所以我需要渲染MainScreen小部件及其所有內容,並將其作爲位圖傳遞給某個通信通道。在Qt中渲染離線幀

我想最大限度地減少電話數量渲染,因爲它是CPU昂貴,但我也希望能夠選擇在UI中的所有更改。

所以我試圖把QWidget->渲染命令的paintEvent裏面,卻引起遞歸重繪錯誤。

抓取應用程序框架時沒有遞歸重繪錯誤的最佳方式是什麼?

+0

是[QWidget :: grab](http://doc.qt.io/qt-5/qwidget.html#grab)不是你在找什麼? –

+0

這是抓住一個框架的另一個功能,但正如我所提到的問題是它的激活時機。如果計時器很慢,按計時器激活它可能會導致丟失事件,或者在計時器太快時導致開銷過大。從paintEvent激活導致遞歸重繪錯誤。 – Alex

回答

0

它可能不是最好的解決方案,但如果它已被調用,則可以通過跳過render()調用來中斷遞歸。

void paintEvent() { 

    ... 

    if(! m_rendering) { // m_rendering must be class member variable 
     m_rendering = true; 
     render(); 
     m_rendering = false; 
     return; 
    } 

    ... 

} 

但要注意的是,如果MainScreenpaintEvent()叫你只會渲染。所以你很可能會錯過一個子部件的重繪。您可以通過使用QTimer受控update()調用來解決此問題。具體取決於您需要的幀速率。

+0

這可能是可能的解決方案,我會嘗試。 – Alex