我正在处理的应用程序由许多C线程组成,这些C线程通过消息(0mq
)进行通信。其中一个线程正在处理显示,并应在屏幕外呈现一个小部件,以便将其“屏幕截图”传递给应用程序的其他线程。
问题在于,为了绘制窗口小部件,您需要将其放在QApplication
中并调用exec()
的{{1}}方法,这实际上是一个循环。所以我的线程完全陷入困境,再也无法与外部世界通信,因为它在exec()方法中。
有没有办法可以在单独的线程中启动QApplication并与之通信,这样我的显示线程就不会卡住? 或者至少有一种方法可以做我想用Qt做什么?
非常感谢!
编辑:此应用程序最终将成为Qt嵌入式应用程序
更新基本上,我的问题是:如何在与我的C代码分开的线程中启动QApplication并与之通信?
答案 0 :(得分:1)
我最终为QApplication主事件循环(exec())创建了一个单独的线程,并使用0mq套接字从我的应用程序的其余部分与它进行通信。
答案 1 :(得分:0)
我不明白“画一个小部件”是什么意思。但请注意:QWidget是GUI的一部分,GUI部分应仅由Main(UI)线程触及。这是一条你无法改变的规则。此外,QApplication仅适用于主线程,因为QApplication是GUI本身的主要部分。
您可以使用全局qApp
对象(需要包含QApplication)和sendEvent()
或postEvent()
方法将消息发布到QAppplication。
此外,我建议您使用您拥有的任何数据生成QImage,并通过上述事件机制将其传播到您需要的小部件。但是,显然,我不知道你真正需要什么。