如何在QT中制作模态QProgressDialog?



我正在从线程调用QProgressDialog,即使我将setModal 设置为true,也无法将其设置为模态窗口。我希望在QProgressDialog运行时阻止主窗口。

以下是我的一段代码。

通用函数.h
QProgressDialog *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

相关内容

  • 没有找到相关文章

最新更新