C++ 如何在QT中创建模式QProgressDialog?

C++ 如何在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,即使我将setModal设置为true,也无法将其作为模式窗口。我希望在QProgressDialog运行时阻止主窗口

下面是我的一段代码

GenericFunc.h
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,这样就可以阻止父窗口。