![](/img/trans.png)
[英]Qt/C++ How can I disconnect a QProgressDialog::canceled signal to its QProgressDialog::cancel slot?
[英]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
没有任何父级,因此它不会阻塞任何父级窗口链。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.