0

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

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

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

非常感谢 !

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

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

4

2 回答 2

1

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

于 2013-11-18T13:24:17.720 回答
0

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

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

于 2013-10-24T15:03:11.327 回答