我想将Qt应用程序映像实时传输到另一个设备。因此,我需要呈现MainScreen小部件及其所有内容,并将其作为位图传递给某个通信通道。
我想尽量减少对render的调用次数,因为它占用CPU,但我也希望能够在UI中选择所有更改。
因此,我尝试将QWidget->render命令放入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()
调用来解决此问题。。这取决于您需要的帧速率。