Qt4 从不同线程访问Qt小部件
在Qt中,对象属于创建它的线程。 我们需要从后台线程访问在主线程中创建的控件。 然而,只要我们引用对象,应用程序就会进入挂起状态。 请让我知道如何访问和修改未创建控件的不同线程中的控件Qt4 从不同线程访问Qt小部件,qt4,Qt4,在Qt中,对象属于创建它的线程。 我们需要从后台线程访问在主线程中创建的控件。 然而,只要我们引用对象,应用程序就会进入挂起状态。 请让我知道如何访问和修改未创建控件的不同线程中的控件 提前感谢。尝试将类指针传递给构造函数。您可以从后台线程触发信号,以便在主线程的插槽中执行。如果我没记错的话,如果在连接调用中指定Qt::AutoConnection,这将自动完成。对于另一个线程所拥有的对象,从一个线程访问许多特定于Qt的代码部分时会遇到问题。解决这个问题的最简单方法是使用信号和插槽,正如所建议的
提前感谢。尝试将类指针传递给构造函数。您可以从后台线程触发信号,以便在主线程的插槽中执行。如果我没记错的话,如果在连接调用中指定Qt::AutoConnection,这将自动完成。对于另一个线程所拥有的对象,从一个线程访问许多特定于Qt的代码部分时会遇到问题。解决这个问题的最简单方法是使用信号和插槽,正如所建议的那样。如果这还不够,您应该查看事件代码。您可以向对象A发送一个事件,该事件包含一个指向对象B(应该接收响应)的指针,然后在对象A的
customEvent()
函数中,为响应创建一个事件并将其发送到对象B。cusotmEvent()
函数始终在拥有给定对象的线程中运行,因此,您可以安全地与Qt提供的代码进行交互。将事件发布到另一个对象也被明确列为线程安全,无论接收对象的线程是谁。我不同意。Qt清楚地表明,除了主线程之外,您不能从其他线程访问gui。有两种方法可以实现你所需要的
updateProgressBar(int)
,线程信号updateProgressBar(int)
。您可以这样连接connect(workerThread,SIGNAL(updateProgressBar(int)),mainWindow,SLOT(updateProgressBar(int)),Qt::QueuedConnection)
您还可以将工作线程信号直接连接到要更新的小部件=QEvent::User
和