QT的QProgressDialog類的使用
詳細說明
QProgressDialog類提供有關緩慢操作進度的反饋。
進度對話方塊用於向使用者指示操作將花費多長時間,並演示應用程式尚未凍結。它還可以使使用者有機會中止該操作。
進度對話方塊的一個常見問題是很難知道何時使用它們。操作在不同的硬體上花費的時間不同。 QProgressDialog提供瞭解決此問題的方法:它估算操作將花費的時間(基於步驟的時間),並且僅在估算值超過minimumDuration()(預設為4秒)時才顯示自身。
使用setMinimum()和setMaximum()或建構函式來設定操作中的“步數”,並在操作進行時呼叫setValue()。步數可以任意選擇。它可以是複製的檔案數,接收的位元組數,通過演算法主迴圈的迭代數或其他合適的單位。進度從setMinimum()設定的值開始,並且進度對話方塊顯示,當您使用setMaximum()設定的值作為引數呼叫setValue()時,操作已完成。
該對話方塊會在操作結束時自動重置並隱藏。使用setAutoReset()和setAutoClose()更改此行為。請注意,如果您設定了一個新的最大值(使用setMaximum()或setRange()),該最大值等於當前的value(),則對話方塊將不會關閉。
有兩種使用QProgressDialog的方法:模態和無模。
與無模式QProgressDialog相比,模式QProgressDialog對程式設計師而言更簡單。迴圈執行該操作,每隔一段時間呼叫setValue(),然後使用wasCanceled()檢查取消。例如:
QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);
progress.setWindowModality(Qt::WindowModal);
for (int i = 0; i < numFiles; i++) {
progress.setValue(i);
if (progress.wasCanceled())
break;
//... copy one file
}
progress.setValue(numFiles);
無模式進度對話方塊適用於在後臺進行的操作,使用者可以在其中與應用程式進行互動。這樣的操作通常基於QTimer(或QObject :: timerEvent())或QSocketNotifier。或在單獨的執行緒中執行。主視窗狀態列中的QProgressBar通常是無模式進度對話方塊的替代方法。
您需要執行一個事件迴圈,將canceled()訊號連線到停止該操作的插槽,然後間隔呼叫setValue()。例如:
// Operation constructor
Operation::Operation(QObject *parent)
: QObject(parent), steps(0)
{
pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100);
connect(pd, SIGNAL(canceled()), this, SLOT(cancel()));
t = new QTimer(this);
connect(t, SIGNAL(timeout()), this, SLOT(perform()));
t->start(0);
}
void Operation::perform()
{
pd->setValue(steps);
//... perform one percent of the operation
steps++;
if (steps > pd->maximum())
t->stop();
}
void Operation::cancel()
{
t->stop();
//... cleanup
}
在這兩種模式下,可以通過使用setLabel(),setBar()和setCancelButton()將子小部件替換為自定義小部件來定製進度對話方塊。函式setLabelText()和setCancelButtonText()設定顯示的文字。
相關文章
- QT的QImage類的使用QT
- QT的QAxBase類的使用QT
- QT的QWGLNativeContext類的使用QTContext
- qt -- QString類及常用函式功能的使用QT函式
- C++ Qt開發:使用順序容器類C++QT
- C++ Qt開發:使用關聯容器類C++QT
- QT視窗類QT
- QT - 13.1.1 ListView 的簡單使用QTView
- QT執行緒的使用 moveToThread()QT執行緒thread
- Qt事件過濾器的使用QT事件過濾器
- Qt容器類QList、QLinkedList和QVector類QT
- Qt qAbs、qMax、qRound和qSwap的使用QT
- QT5.9關於QMenuBar的使用QT
- Qt中的佈局淺析與彈簧的使用,以及Qt居中的兩種方法QT
- File類的使用
- Random 類的使用random
- String類的使用
- NavigableMap類的使用
- python類的使用Python
- Qt三大視窗基類的差別QMainWindow QWidget QDialogQTAI
- Qt 字型(04):QFont類【官翻】QT
- Qt-pyqt6與QTDesginers的相互使用技巧QT
- autohotkey qt程式中無法使用的問題QT
- 包裝類的使用
- String類的使用2
- Qt 報錯 “類名”does not name a typeQT
- QT使用 http 協議通訊的實現示例QTHTTP協議
- 已經編譯好的opencv QT creator直接使用編譯OpenCVQT
- python中calss(類)的使用,類的教程,類中的函式怎麼呼叫。Python函式
- URLConnection類,HttpURLConnection類的使用和總結HTTP
- 【QT】 Qt多執行緒的“那些事”QT執行緒
- 匿名內部類的使用
- io流-file類的使用
- Java中的Reference類使用Java
- Arthas 使用的各類方式
- TypeScript介面與類的使用TypeScript
- Qt開發工具使用QT
- QT creator使用筆記QT筆記