在单独的线程 Qt 中渲染屏幕外小部件

Render off screen widget in a separate thread Qt

本文关键字:屏幕 小部 单独 线程 Qt      更新时间:2023-10-16

我正在开发的应用程序由许多通过消息(0mq)通信在一起的C线程组成。其中一个线程正在处理显示,并且应该在屏幕外呈现一个小部件,以便将其"屏幕截图"传达给应用程序的其他线程。

问题是,为了绘制一个小部件,您需要将其放置在QApplication中并调用QApplicationexec()方法,这本质上是一个循环。所以我的线程完全卡住了,无法再与外界通信,因为它在 exec() 方法中。

有没有办法在单独的线程中启动 QApplication 并与之通信,这样我的显示线程就不会卡住?或者至少有一种方法可以做我想用Qt做的事情?

多谢!

编辑:此应用程序最终将成为Qt嵌入式应用程序

更新基本上,我的问题是:如何在与我的 C 代码不同的线程中启动 QApplication 并与之通信?

我最终为 QApplication 主事件循环 (exec()) 创建了一个单独的线程,并使用 0mq 套接字与应用程序的其余部分进行通信。

我不明白你说的"画一个小部件"是什么意思。但请注意:QWidget是GUI的一部分,GUI部分应该只由Main(UI)线程接触。这是你无法改变的规则。此外,QApplication仅在主线程上运行,因为QApplication是GUI本身的主要部分。您可以使用全局qApp对象(需要为其包含 QApplication)和sendEvent()postEvent()方法将消息发布到 QAppplication。

此外,我建议您使用您拥有的任何数据生成 QImage,并通过上述事件机制将其传播到您需要的小部件。但是,显然,我不知道你真正需要什么。