[英]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.