暂时停止Qt5 / QML更新帧缓冲区(/ dev / fb0)

时间:2017-10-13 15:07:48

标签: linux qt embedded qml framebuffer

在嵌入式系统上,由于非常具体的硬件/软件限制,我们需要另一个程序能够通过framebuffer(/ dev / fb0)显示信息,同时保持我们的Qt5 / QML程序在后台运行。 br />我们在第二个程序运行时在QML中显示一个自定义的QQuickItem派生的黑色矩形(在update()中只有'return'),但我们的LCD显示屏上仍然会看到闪烁。我们推测QT仍在将屏幕图形(可能是矩形下面的其他项目)绘制到/ dev / fb0,因此两个程序同时写入/ dev / fb0会导致闪烁。
我们不能使用第二个帧缓冲方法(/ dev / fb1),因为合成会大大增加处理器负载,使系统变得无法使用。
一种想法是遍历屏幕图树,将所有节点的ItemHasContents标记为false所以屏幕图形渲染器不会写入FB,然后在辅助程序完成任务时重新启用。
另一个想法是通过顶级QWindow关闭渲染,但文档中没有任何内容说这甚至可能...这可以通过QT,或者即使是shell脚本吗?

1 个答案:

答案 0 :(得分:0)

/dev/fb0听起来像是在使用基于Linux的系统。

你不是说你是否需要Qt应用程序真正继续运行,只是没有屏幕更新,或者在你的其他应用程序使用帧缓冲区时是否只是“冻结”它就足够了。

如果对后者没问题,那么停止Qt应用程序渲染的最简单方法就是发送一个SIGSTOP信号,它会冻结并停止升级帧缓冲区。完成fb后,发送SIGCONT信号。有时最简单的方法是最好的......