我想将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