Multithreading 在Qt解决方案的非GUI线程中添加小部件?

Multithreading 在Qt解决方案的非GUI线程中添加小部件?,multithreading,qt,Multithreading,Qt,我一直在Qt的一个项目上工作。 有一个父类,当我的程序在启动时运行时,它会添加所有GUI内容。 然而,在获取用户输入后,我在其他各种类中执行一些数学运算,以检查错误的用户输入(每个类都有特定类型的错误)。这些类的对象已移动到我创建的其他线程(obj->movetothread(thread))。因此,我可以通过多线程同时检查所有错误。问题是,每当有不正确的用户输入时,我就会抛出一个包含相应错误信息的MessageBox。由于错误检查是在非GUI线程上进行的,因此当前正在使我的程序崩溃。因此,我唯

我一直在Qt的一个项目上工作。 有一个父类,当我的程序在启动时运行时,它会添加所有GUI内容。 然而,在获取用户输入后,我在其他各种类中执行一些数学运算,以检查错误的用户输入(每个类都有特定类型的错误)。这些类的对象已移动到我创建的其他线程(obj->
movetothread
(thread))。因此,我可以通过多线程同时检查所有错误。问题是,每当有不正确的用户输入时,我就会抛出一个包含相应错误信息的MessageBox。由于错误检查是在非GUI线程上进行的,因此当前正在使我的程序崩溃。因此,我唯一的选择是保留包含该错误的
QString
的引用&当我最终从所有错误检查返回时,我会在GUI线程中一个接一个地抛出MessageBox。这个过程非常麻烦,我想知道是否有解决这个问题的方法


PS:长话短说,在多线程应用程序中,如何在非GUI线程中添加GUI内容?

您不必从非GUI线程操作GUI。一个好方法是在需要操作GUI时从工作线程发出一个信号,并等待用户的回答(比如在QSemaphore上或任何您喜欢的方式)。使用Qt::QueuedConnection将该信号连接到GUI线程中的QObject中实现的插槽。这将运行GUI线程中的插槽


不管怎样,你都可以在这方面找到你需要的东西。只需开始搜索。

您不必从非GUI线程操作GUI。一个好方法是在需要操作GUI时从工作线程发出一个信号,并等待用户的回答(比如在QSemaphore上或任何您喜欢的方式)。使用Qt::QueuedConnection将该信号连接到GUI线程中的QObject中实现的插槽。这将运行GUI线程中的插槽


不管怎样,你都可以在这方面找到你需要的东西。只需开始搜索。

正确的方法是如上所述在GUI线程中发出信号并捕获它,但您也可以使用QMetaObject::invokeMethod()来实现这一点。

正确的方法是如上所述在GUI线程中发出信号并捕获它,但您也可以使用QMetaObject::invokeMethod()来实现这一点