Как красиво "привести" qint64 к int для QProgressBar - PullRequest
4 голосов
/ 08 февраля 2011

Я играю с QFtp (да .. я знаю), и все работает хорошо.

Использование кода из собственного примера (ов) в качестве руководства.

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

Единственная проблема, с которой я сталкиваюсь, это то, что при отправке (или получении) больших файлов (скажем, 3 ГБ) горит индикатор выполнения.

Это связано с приведением от qint64 к int в:

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

Мне интересно, что было бы лучшим способом справиться с этим после того, как в течение примерно часа гуглил и решил сохранить его «в безопасности», убедившись, что я не выхожу за пределы диапазона.

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

Но это не "чувствует" правильно. ,

Ответы [ 2 ]

7 голосов
/ 08 февраля 2011

Вы можете сделать индикатор выполнения в процентах:

void FtpWindow::updateDataTransferProgress(qint64 readBytes, 
    qint64 totalBytes) 
{
    progressDialog->setMaximum(100);
    progressDialog->setValue((qint)((readBytes * 100) / totalBytes));
}
1 голос
/ 08 февраля 2011

Установите индикатор выполнения в диапазоне 0-100 и отображайте процент прочитанных байтов вместо попытки установить абсолютное значение.

...