2011-02-08 80 views
3

我正在玩QFtp(是的,我知道)並且一切正常。如何很好地將qint64「投」到QProgressBar的int int

使用他們自己示例中的代碼作爲指導。

http://doc.qt.io/archives/qt-4.7/network-qftp-ftpwindow-cpp.html

我遇到的唯一問題是何時發送(或接收)大文件(假設3 GB)的進度條毛刺出來。

這是由於從qint64投中INT:

void FtpWindow::updateDataTransferProgress(qint64 readBytes, 
    qint64 totalBytes) 
{ 
    progressDialog->setMaximum(totalBytes); 
    progressDialog->setValue(readBytes); 
} 

我不知道什麼是谷歌搜索了大約一個小時,安定在保持其「安全」後,來處理這個的最好方式通過確保我不會超出範圍。

while (totalBytes > 4294967295UL) 
{ 
    totalBytes = totalBytes/4294967295UL; 
    readBytes = readBytes/4294967295UL; 
} 

但這並不「感覺」正確。 。

回答

7

可以使進度條呈現進度的百分比:

void FtpWindow::updateDataTransferProgress(qint64 readBytes, 
    qint64 totalBytes) 
{ 
    progressDialog->setMaximum(100); 
    progressDialog->setValue((qint)((readBytes * 100)/totalBytes)); 
} 
+4

任何其他數超過100也將工作,當然。但是如果你的progrssbar是例如700像素寬,使用百分比意味着它一次只會更新7個像素。就個人而言,我會選擇4096. – MSalters 2011-02-08 12:36:55

1

將進度條設置爲0-100的範圍,並顯示讀取的字節百分比,而不是嘗試設置絕對值。