为什么std :: thread无法打开QT对话框?

问题描述 投票:0回答:2

我想在std :: thread中打开一个简单的QT对话框,但是在对话框打开成功后崩溃。

std::thread([&](){
    DialogWarning* dlg=new DialogWarning();
    dlg->setModal(true);
    dlg->exec();
    delete dlg;
}).detach();

此代码有什么问题?

qt c++11 stdthread
2个回答
5
投票

UI组件只能从主线程(也称为GUI线程)打开。

来自Threading basics | Qt 5.13

Qt GUI必须在此[[[main]线程中运行。所有小部件和几个相关类(例如QPixmap)在辅助线程中均不起作用。


2
投票
@ MarkoPacak已正确提及不能在其他线程中打开对话框的主要原因。

但是,您可以通过在主线程中的emit捕获线程中的slot信号来解决此问题。然后,在您的插槽中,可以显示对话框。

© www.soinside.com 2019 - 2024. All rights reserved.