使用Boost线程更新Qt GUI

3
我正在使用Boost Thread从相机收集图像,并在每次出现新图像时调用Qt信号。现在,当发出此信号时,连接的槽将运行,在其中我正在更新小部件,控制流程进入我的槽,但它不会更新小部件,而是在控制台上打印以进行调试。我的问题是,这个槽是在主线程中运行还是在发出信号的线程中运行,如何实现所需的更新? 谢谢

1
我从未使用过boost,但Qt有一个非常干净和简单的线程接口:QThread - Balázs Édes
1个回答

1

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

编辑:这可能很有用 从非Qt线程发出信号,QueuedConnection

您是否阻塞了主线程?


不,主线程正在运行例程。主要问题在于,由于主(GUI)线程负责绘制和更新内容,而我的SLOT定义在主线程中,为什么我不能更新它。我可以从该SLOT实现与GUI无关的其他任务,这意味着该SLOt是由发出信号的线程运行的。(如果我错了,请纠正我)您对此问题有什么建议? - zulqarnain haider
你尝试过强制使用Qt :: QueuedConnection连接而不是让它自己决定吗?我看到的一些讨论说这是必需的。我自己还没有尝试从boost线程发出信号,所以我不确定是否需要这样做。我知道在QThread中不需要这样做,因为我在之前的应用程序中已经这样做了。 - drescherjm
是的,我也尝试过那个,但没有改变任何东西。也许我应该将我的应用程序从boost转移到QThread。 - zulqarnain haider
你是在应用程序线程中创建了发射信号的Qt对象,还是在boost线程中创建的?我认为你需要在boost线程中创建Qt对象,因为你不能使用QObject::moveToThread与boost线程。 - drescherjm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接