0

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

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

4

2 回答 2

4

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

无论如何,你可以在这个主题上找到你需要的任何东西。刚开始搜索。

于 2013-02-11T07:19:01.697 回答
0

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

于 2013-02-11T12:37:21.937 回答