C++ 如何在QT中创建模式QProgressDialog?
我正在从线程调用QProgressDialog,即使我将setModal设置为true,也无法将其作为模式窗口。我希望在QProgressDialog运行时阻止主窗口 下面是我的一段代码 GenericFunc.hC++ 如何在QT中创建模式QProgressDialog?,c++,qt,modal-dialog,qt5,qprogressdialog,C++,Qt,Modal Dialog,Qt5,Qprogressdialog,我正在从线程调用QProgressDialog,即使我将setModal设置为true,也无法将其作为模式窗口。我希望在QProgressDialog运行时阻止主窗口 下面是我的一段代码 GenericFunc.h QProgressDialog*progressBarDialog GenericFunc.cpp void GenericFunc::testSlot() { int numTasks = 4500; progressBarDial
QProgressDialog*progressBarDialog代码>
GenericFunc.cpp
void GenericFunc::testSlot()
{
int numTasks = 4500;
progressBarDialog = new QProgressDialog("Task in progress.", "Cancel", 0, numTasks);
progressBarDialog->setWindowModality(Qt::WindowModal);
progressBarDialog->setModal(true);
progressBarDialog->exec();
}
QProgressDialog类是一个GUI类。您不能在工作线程中实例化它
GUI线程和工作线程
如前所述,每个程序在启动时都有一个线程。这
线程被称为“主线程”(在中也称为“GUI线程”)
Qt应用程序)。Qt GUI必须在此线程中运行。所有小部件和
有几个相关的类,例如QPixmap,在中学中不起作用
线程。次线程通常被称为“工作线程”
线程”,因为它用于从主线程卸载处理工作
线
使用信号槽将进度数据从工作线程传递到gui线程
另一个问题是您将其设置为WindowModal,但此progressBarDialog
没有任何父窗口,因此它不会阻止任何父窗口链
正在从另一个QThread调用插槽?谢谢,我在mainwindow中创建了一个插槽,并从工作线程发出一个信号,然后我将WindowModal设置为ApplicationModel,这样就可以阻止父窗口。