2010-04-02 53 views
0

我首先表明我的代碼,然後我解釋我的問題:QProgressBar問題上傳

 
... 
// somewhere in the constructor 
    progressBar = new QProgressBar(this); 
    progressBar->setMinimum(0); 
    progressBar->setMaximum(100); 
... 
    connect(&http, SIGNAL(dataSendProgress(int, int)), this, SLOT(updateProgressBar(int, int))); 
... 
void MainWindow::updateProgressBar(int bytesSent, int total) 
{ 
     progressBar->setMaximum(total); 
     progressBar->setValue(bytesSent); 
} 

所以這就是我儘量讓我的進度條,當我上傳文件被更新。問題是,它不會做這項工作。當它開始上傳時,我將進度條的值設置爲0,然後(由於此插槽)它不會實際顯示進度,但會立即跳至100%(甚至在上傳完成之前)。

我已經檢查過HTTP客戶端的例子,並且複製了進度條部分,它是用於下載的,並且或多或少與上傳相同,但它使用dataReadProgress信號(需要下載)並且它完美地與works相關。
有誰知道如何解決這個上傳?

+0

你執行一個單獨的線程上傳?如果您在GUI線程中執行上載,則由於線程被阻止,進度條可能不會更新。 – 2010-04-02 16:14:50

回答

0

從Qt的文件:

警告:完成,總不能 一定字節大小,因爲 對於大文件,這些值可能 需要被「縮放」,以避免溢出。

另請參閱dataReadProgress(),post(), request()和QProgressBar。

所以萬一done是(例如)以字節爲單位(如10 B)和千字節total(比如說7 KB)然後total < done,因此進度進行到100%

+0

實際上,我在信號發射時打印出了兩個值,並且它跳到100%的原因是在上傳過程開始時兩個值(done/total)都是相同的(如13340/13340)已經 – rolanddd 2010-04-07 08:53:13