我正在从线程调用QProgressDialog,即使我将setModal 设置为true,也无法将其设置为模态窗口。我希望在QProgressDialog运行时阻止主窗口。
以下是我的一段代码。
通用函数.hQProgressDialog *progressBarDialog;
通用函数.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 类。您无法在工作线程中实例化它。
http://doc.qt.io/qt-5/thread-basics.html#gui-thread-and-worker-thread
GUI 线程和工作线程
如前所述,每个程序在启动时都有一个线程。这 线程称为"主线程"(也称为"GUI 线程" Qt应用程序(。Qt GUI 必须在此线程中运行。所有小部件和 几个相关的类,例如QPixmap,在二级数据库中不起作用 线程。辅助线程通常称为"辅助线程" 线程",因为它用于从主线程卸载处理工作 线。
使用信号槽将进度数据从工作线程传递到 gui 线程。
另一个问题是你把它设置为 WindowModal,但这个progressBarDialog
没有任何父窗口,所以它不会阻止任何父窗口链。
http://doc.qt.io/qt-5/qt.html#WindowModality-enum