主頁(yè) | 所有的類(lèi) | 主要的類(lèi) | 注釋的類(lèi) | 分組的類(lèi) | 函數(shù) | ![]() |
QProgressDialog類(lèi)提供了慢操作的進(jìn)度的反饋。 詳情請(qǐng)見(jiàn)……
#include <qprogressdialog.h>
繼承了QDialog。
進(jìn)度對(duì)話框用于給用戶這個(gè)操作還要有多長(zhǎng)時(shí)間的指示,并且證明這個(gè)應(yīng)用程序還沒(méi)有凍結(jié)。它也給用于一個(gè)中止這個(gè)操作運(yùn)行的機(jī)會(huì)。
進(jìn)度對(duì)話框的一個(gè)常見(jiàn)問(wèn)題是很難知道什么時(shí)候使用它們,操作在不同的硬件會(huì)占用不同的時(shí)間。QProgessDialog提供了對(duì)這個(gè)問(wèn)題的解決方案:它估計(jì)操作將占用的時(shí)間(基于沒(méi)步的時(shí)間),并且如果它超過(guò)minimumDuration()(默認(rèn)為4秒)才顯示自己。
使用setTotalSteps()(或者在構(gòu)造函數(shù)中)設(shè)置操作中的“步”數(shù)并且調(diào)用setProgress()作為操作進(jìn)度。步值的選擇是任意的。它可以是復(fù)制的文件數(shù),接收的字節(jié)數(shù),在你的算法的主循環(huán)中的反復(fù)次數(shù),或者一些其它的適合單元。進(jìn)度從0開(kāi)始,并且當(dāng)你把totalSteps()作為參數(shù)調(diào)用setProgress(),這個(gè)進(jìn)度對(duì)話框會(huì)顯示這個(gè)操作已經(jīng)完成。
對(duì)話框會(huì)在操作結(jié)束的時(shí)候自動(dòng)重置并且隱藏自己。使用setAutoReset()和setAutoClose()可以改變這個(gè)行為。
這里有使用QProgressDialog的兩種方法:模式和非模式。
對(duì)于程序員,使用模式QProgressDialog是更簡(jiǎn)單的,但是你必須調(diào)用qApp->processEvents()來(lái)保持事件循環(huán)的運(yùn)行來(lái)確保應(yīng)用程序沒(méi)有凍結(jié)。在循環(huán)中執(zhí)行這個(gè)操作,在間隔中調(diào)用setProgress(),并且檢查wasCancelled()的取消。例如:
QProgressDialog progress( "Copying files...", "Abort Copy", numFiles,this, "progress", TRUE );for ( int i = 0; i < numFiles; i++ ) {progress.setProgress( i );qApp->processEvents();if ( progress.wasCancelled() )break;//……復(fù)制文件}progress.setProgress( numFiles );
非模式進(jìn)度對(duì)話框適合發(fā)生在后臺(tái)的操作,用戶還可以和應(yīng)用程序進(jìn)行交互。這樣的操作通常是基于QTimer(或者QObject::timerEvent())、QSocketNotifier或QUrlOperator,或者在一個(gè)獨(dú)立的進(jìn)度中執(zhí)行。你的主窗口的狀態(tài)條中的QProgressBar常??梢宰鰹槟J竭M(jìn)度對(duì)話框的替代。
你需要擁有一個(gè)正在運(yùn)行的時(shí)間循環(huán),把cancelled()信號(hào)和停止這個(gè)操作的槽連接起來(lái),并且在間隔中調(diào)用setProgress()。例如:
Operation::Operation( QObject *parent = 0 ): QObject( parent ), steps( 0 ){pd = new QProgressDialog( "Operation in progress.", "Cancel", 100 );connect( pd, SIGNAL(cancelled()), this, SLOT(cancel()) );t = new QTimer( this );connect( t, SIGNAL(timeout()), this, SLOT(perform()) );t->start( 0 );}void Operation::perform(){pd->setProgress( steps );//……執(zhí)行操作的一個(gè)半分比steps++;if ( steps > pd->totalSteps() )t->stop();}void Operation::cancel(){t->stop();//……清除}
你可以通過(guò)使用setLabel()、setBar()和setCancelButton()用自定制的窗口部件來(lái)替換子窗口部件來(lái)定制這兩種進(jìn)度對(duì)話框。
也可以參考QDialog、QProgressBar、圖形用戶界面設(shè)計(jì)手冊(cè):進(jìn)度指示器和Dialog Classes。
默認(rèn)設(shè)置:
creator窗口部件的頂級(jí)父對(duì)象變?yōu)檫@個(gè)對(duì)話框的父對(duì)象。name、modal和窗口部件標(biāo)記f被傳遞給QDialog::QDialog()的構(gòu)造函數(shù)。如果modal為假(默認(rèn)),你必須有一個(gè)正在進(jìn)行的事件循環(huán)來(lái)重新繪制這個(gè)對(duì)話框的變化。如果modal為真,這個(gè)對(duì)話框確保當(dāng)需要的時(shí)候事件會(huì)被處理。
也可以參考labelText、setLabel()、setCancelButtonText()、setCancelButton()和totalSteps。
labelText是用于提行用戶什么正在進(jìn)行的文本。
cancelButtonText是顯示在取消按鈕上的文本,或者如果沒(méi)有取消按鈕被顯示就為0。
totalSteps是這個(gè)進(jìn)度對(duì)話框顯示進(jìn)度的操作的總步數(shù)。例如,如果這個(gè)操作檢測(cè)50個(gè)文件,這個(gè)值就應(yīng)該為50。在檢測(cè)第一個(gè)文件之前,調(diào)用setProgress(0)。每一個(gè)問(wèn)卷被處理的時(shí)候,調(diào)用setProgress(1)、setProgress(2)等等,在檢測(cè)完最后一個(gè)文件之后調(diào)用setProgress(50)。
name、modal和窗口部件標(biāo)記f被傳遞給QDialog::QDialog()的構(gòu)造函數(shù)。如果modal為假(默認(rèn)),你必須有一個(gè)正在進(jìn)行的事件循環(huán)來(lái)重新繪制這個(gè)對(duì)話框的變化。如果modal為真,這個(gè)對(duì)話框確保當(dāng)需要的時(shí)候事件會(huì)被處理。
creator參數(shù)是用來(lái)做為這個(gè)對(duì)話框的父對(duì)象的窗口部件。如果creator不是一個(gè)頂級(jí)窗口部件,傳遞給QDialog構(gòu)造函數(shù)的這個(gè)參數(shù)將為0。
也可以參考labelText、setLabel()、setCancelButtonText()、setCancelButton()和totalSteps。
如果通過(guò)reset()對(duì)話框是隱藏的,返回真,否則返回假。詳細(xì)情況請(qǐng)參考“autoClose”屬性。
如果一旦progress()等于totalSteps(),進(jìn)度對(duì)話框調(diào)用reset(),返回真,否則返回假。詳細(xì)情況請(qǐng)參考“autoReset”屬性。
當(dāng)取消按鈕被點(diǎn)擊時(shí),這個(gè)信號(hào)被發(fā)射。它默認(rèn)被連接到cancel()槽。
也可以參考wasCancelled。
實(shí)例:progress/progress.cpp。
也可以參考minimumDuration。
返回標(biāo)簽的文本。詳細(xì)情況請(qǐng)參考“labelText”屬性。
返回進(jìn)度就應(yīng)該在對(duì)話框打開(kāi)之前運(yùn)行的時(shí)間。詳細(xì)情況請(qǐng)參考“minimumDuration”屬性。
返回進(jìn)度當(dāng)前的進(jìn)度。詳細(xì)情況請(qǐng)參考“progress”屬性。
設(shè)置通過(guò)reset()對(duì)話框是否隱藏為b。詳細(xì)情況請(qǐng)參考“autoClose”屬性。
設(shè)置一旦progress()等于totalSteps(),進(jìn)度對(duì)話框是否調(diào)用reset()為b。詳細(xì)情況請(qǐng)參考“autoReset”屬性。
也可以參考setCancelButtonText()。
也可以參考setCancelButton()。
也可以參考labelText。
實(shí)例:progress/progress.cpp。
設(shè)置標(biāo)簽的文本。詳細(xì)情況請(qǐng)參考“labelText”屬性。
設(shè)置進(jìn)度就應(yīng)該在對(duì)話框打開(kāi)之前運(yùn)行的時(shí)間為ms。詳細(xì)情況請(qǐng)參考“minimumDuration”屬性。
設(shè)置進(jìn)度當(dāng)前的進(jìn)度為progress。詳細(xì)情況請(qǐng)參考“progress”屬性。
設(shè)置步數(shù)的總量為totalSteps。詳細(xì)情況請(qǐng)參考“totalSteps”屬性。
返回步數(shù)的總量。詳細(xì)情況請(qǐng)參考“totalSteps”屬性。
如果對(duì)話框被取消,返回真,否則返回假。詳細(xì)情況請(qǐng)參考“wasCancelled”屬性。
這個(gè)屬性保存的是通過(guò)reset()對(duì)話框是否隱藏。
默認(rèn)為真。
也可以參考autoReset。
通過(guò)setAutoClose()設(shè)置屬性值并且通過(guò)autoClose()來(lái)獲得屬性值。
這個(gè)屬性保存的是一旦progress()等于totalSteps(),進(jìn)度對(duì)話框是否調(diào)用reset()。
默認(rèn)為真。
也可以參考autoClose。
通過(guò)setAutoReset()設(shè)置屬性值并且通過(guò)autoReset()來(lái)獲得屬性值。
這個(gè)屬性保存的是標(biāo)簽的文本。
默認(rèn)文本為QString::null。
通過(guò)setLabelText()設(shè)置屬性值并且通過(guò)labelText()來(lái)獲得屬性值。
這個(gè)屬性保存的是進(jìn)度就應(yīng)該在對(duì)話框打開(kāi)之前運(yùn)行的時(shí)間。
如果正在進(jìn)行的進(jìn)度任務(wù)的被期待持續(xù)時(shí)間小于這個(gè)最小持續(xù)時(shí)間,對(duì)話框?qū)⒉粫?huì)顯示。
如果被設(shè)置為0,一旦任何進(jìn)度被設(shè)置,這個(gè)對(duì)話框就一直被顯示。默認(rèn)為4000毫秒。
通過(guò)setMinimumDuration()設(shè)置屬性值并且通過(guò)minimumDuration()來(lái)獲得屬性值。
這個(gè)屬性保存的是進(jìn)度當(dāng)前的進(jìn)度。
對(duì)于正如所期望的運(yùn)行的進(jìn)度對(duì)話框,你應(yīng)該初始化設(shè)置這個(gè)屬性為0并且最后把它設(shè)置為QProgressDialog::totalSteps(),你可以在這之間調(diào)用setProgress()任意次。
警告: 如果進(jìn)度對(duì)話框是模式的(請(qǐng)參考QProgressDialog::QProgressDialog())),這個(gè)函數(shù)調(diào)用QApplication::processEvents(),所以注意這個(gè)函數(shù)不會(huì)導(dǎo)致不受歡迎的重新進(jìn)入你的代碼。例如,不要在paintEvent()中使用QProgressDialog!
也可以參考totalSteps。
通過(guò)setProgress()設(shè)置屬性值并且通過(guò)progress()來(lái)獲得屬性值。
這個(gè)屬性保存的是步數(shù)的總量。
默認(rèn)為0。
通過(guò)setTotalSteps()設(shè)置屬性值并且通過(guò)totalSteps()來(lái)獲得屬性值。
這個(gè)屬性保存的是對(duì)話框是否被取消。
也可以參考progress。
這個(gè)文件是Qt工具包一部分。版權(quán)所有 © 1995-2002 Trolltech。保留所有權(quán)利。
Copyright © 2002 Trolltech | Trademarks | 譯者:Cavendish | Qt 3.0.5版 |
聯(lián)系客服