繁体   English   中英

如何在QT中制作模态QProgressDialog?

[英]how to make a modal QProgressDialog in QT?

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

以下是我的代码。

泛型函数
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类。 您无法在辅助线程中实例化该对象。

http://doc.qt.io/qt-5/thread-basics.html#gui-thread-and-worker-thread

GUI线程和工作线程

如前所述,每个程序在启动时都有一个线程。 该线程称为“主线程”(在Qt应用程序中也称为“ GUI线程”)。 Qt GUI必须在此线程中运行。 所有小部件和几个相关类(例如QPixmap)在辅助线程中均不起作用。 辅助线程通常被称为“工作线程”,因为它用于从主线程分担处理工作。

使用信号插槽将进度数据从工作线程传递到gui线程。

另一个问题是您将其设置为WindowModal,但是该progressBarDialog没有任何父级,因此它不会阻塞任何父级窗口链。

http://doc.qt.io/qt-5/qt.html#WindowModality-enum

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM