簡體   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