2012-08-26 65 views
3

我使用boost线程从相机收集图像,每当新图像到达时我都会调用Qt信号。现在,当这个信号发出时,连接的插槽运行,我正在更新小部件控制来到我的插槽,但它不更新小部件,而它在控制台打印调试。我的问题是这个插槽是在主线程还是在线程发出信号以及如何实现所需的更新? 谢谢带升压线程的Qt更新GUI

+1

我从来没有使用boost,但Qt有一个非常干净和简单的线程接口:[QThread](http://doc.qt.nokia.com/4.7-snapshot/qthread.html) –

回答

1

插槽将运行在创建Qt小部件的任何线程中。 Qt将在交叉线程信号和插槽上使用QueuedConnection。

编辑:这可能是有用的 signal qt from a non-qt thread, QueuedConnection

是否阻止了主线程?

+0

没有主线程是常规运行。主要的问题是,因为主(GUI)线程负责绘制和更新的东西,我的SLOT在主线程中定义,为什么我不能更新它。我可以完成其他任务,除了与来自SLOT的GUI相关,这意味着SLOt由发射信号的线程运行。 (纠正我,如果我错了)你可以建议这个问题? –

+0

你是否尝试强制连接使用Qt :: QueuedConnection而不是让它决定。我在这方面看到的一些讨论说这是必需的。我还没有尝试从自己的boost线程发出信号,所以我不确定是否需要。我知道这从QThread是不需要的,因为我在之前的应用程序中做过这些。 – drescherjm

+0

是的,我也试过,但没有改变任何东西,可能是我将我的应用程序从提升转移到QThread。 –