2014-04-15 31 views
0

我知道以前曾经问过类似的问题,但我无法找到针对我的特定问题的答案。我有一个主(GUI)线程,按下按钮初始化一个工作线程来执行一些分析。我使用信号和插槽在我的工作线程和我的GUI线程之间进行通信(即当线程启动并完成时),但是我需要深入其中。我的工作线程实际上是在一个单独的实现文件中调用另一个类,然后迭代通过一系列计算,每次迭代发送到std :: cout(因为代码曾经是一个控制台应用程序,我现在正在编写一个GUI) 。我试图将每次迭代的输出反馈回我的GUI线程,以便在我的代码迭代时实时更新文本浏览器。问题是,当我从工作线程调用的类发出一个信号时,它不会被GUI线程拾取。我没有得到任何错误。有没有人有关于如何从我的工作线程调用的类向GUI传输信号的建议?我可以根据需要发布代码,但我不确定最有用的代码是什么,而且代码非常广泛(这是一个飞机性能应用程序)。任何帮助将不胜感激。非常感谢你!从子线程提供更新到Qt GUI

+0

从你说的话,这似乎是不可能的,所以调试这个,也许你可以检查每个对象的线程关联,也许某个对象不在你期望的线程中。然后检查连接,以及跨线程连接是否正确。 – Bgie

回答

0

1)确保connect()呼叫连接你的信号返回true。如果没有,qdebug输出通常会告诉你什么是错的

2)你应该使用QueuedConnection类型(默认设置(自动),应该也可以)

+0

我不完全确定如何检查我的connect()是否返回true。我试过: 'bool ok = connect(deck,SIGNAL(prop()),this,SLOT(converter())); Q_ASSERT(ok);' 但没有输出 – GTSeth

+0

应该这样做。如果Q_ASSERT失败,则会发出qFatal()消息。输出也会有失败的原因。一定要检查调试输出。 – tpatja

+0

也一定要在调试模式下编译并运行 –