为什么 std::thread 无法打开 QT 对话框?
Why std::thread can't open a QT Dialog?
我想在 std::thread 中打开一个简单的 QT 对话框,但是在对话框打开成功后它崩溃了。
std::thread([&](){
DialogWarning* dlg=new DialogWarning();
dlg->setModal(true);
dlg->exec();
delete dlg;
}).detach();
这段代码有什么问题?
UI 组件只能从主线程(又名 GUI 线程)打开。
The Qt GUI must run in this [the main] thread. All widgets and several related classes, for example QPixmap, don't work in secondary threads.
无法在不同线程中打开对话框的主要原因已被@MarkoPacak 正确提及。
但是,解决此问题的方法是 emit
线程中的信号被主线程中的 slot
捕获。然后,在您的插槽中,您可以显示对话框。
我想在 std::thread 中打开一个简单的 QT 对话框,但是在对话框打开成功后它崩溃了。
std::thread([&](){
DialogWarning* dlg=new DialogWarning();
dlg->setModal(true);
dlg->exec();
delete dlg;
}).detach();
这段代码有什么问题?
UI 组件只能从主线程(又名 GUI 线程)打开。
The Qt GUI must run in this [the main] thread. All widgets and several related classes, for example QPixmap, don't work in secondary threads.
无法在不同线程中打开对话框的主要原因已被@MarkoPacak 正确提及。
但是,解决此问题的方法是 emit
线程中的信号被主线程中的 slot
捕获。然后,在您的插槽中,您可以显示对话框。