【问题标题】:Qt update GUI with boost threadsQt 使用 boost 线程更新 GUI
【发布时间】:2012-08-26 09:50:45
【问题描述】:

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

【问题讨论】:

  • 我从未使用过 boost,但 Qt 有一个非常干净和简单的线程接口:QThread

标签: qt boost-thread


【解决方案1】:

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

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

你在阻塞主线程吗?

【讨论】:

  • 没有主线程在例行程序中运行。主要问题是,由于主(GUI)线程负责绘制和更新东西,而我的 SLOT 是在主线程中定义的,所以我仍然无法更新它。我可以从该 SLOT 完成除与 GUI 相关的其他任务,这意味着 SLOt 正在由发出信号的线程运行。 (如果我错了,请纠正我)你可以为这个问题提出什么建议?
  • 您是否尝试强制连接使用 Qt::QueuedConnection 而不是让它决定。我在这方面看到的一些讨论说这是必需的。我自己还没有尝试从 boost 线程发出信号,所以我不确定是否需要这样做。我知道 QThread 不需要这样做,因为我在以前的应用程序中已经这样做了。
  • 是的,我也试过了,但没有改变任何东西可能是我将我的应用程序从 boost 转移到 QThread。
  • 您是在 Application 线程中创建了从 boost 线程发出信号的 Qt 对象,还是在 boost 线程中创建的。我相信您需要在 boost 线程中创建 Qt 对象,因为您不能将 QObject::moveToThread 与 boost 线程一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2017-02-27
相关资源
最近更新 更多