Как красиво преобразовать qint64 в int для QProgressBar

Я играюсь с 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;
}

Но это не «кажется» правильным. .


person the JinX    schedule 08.02.2011    source источник


Ответы (2)


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

void FtpWindow::updateDataTransferProgress(qint64 readBytes, 
    qint64 totalBytes) 
{
    progressDialog->setMaximum(100);
    progressDialog->setValue((qint)((readBytes * 100) / totalBytes));
}
person trojanfoe    schedule 08.02.2011
comment
Конечно, подойдет и любое другое число, кроме 100. Но если ваш прогрссбар, например, Ширина 700 пикселей, использование процента означает, что за раз будет обновляться только 7 пикселей. Лично я бы выбрал 4096. - person MSalters; 08.02.2011
comment
Да, возможно, процент - это часто используемый метод для представления прогресса, и на самом деле это не имеет большого значения. - person trojanfoe; 08.02.2011
comment
Только что произошла ошибка отклонения на 0 при загрузке 0-байтового файла, поэтому мне пришлось добавить: if (totalBytes! = 0) - person the JinX; 10.02.2011
comment
@the_jinx: хороший улов - это не производственный код качества - он просто дает вам идею. - person trojanfoe; 10.02.2011

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

person badgerr    schedule 08.02.2011