Как добре да прехвърляте qint64 към int за QProgressBar

Играя си с QFtp (да .. знам) и всичко работи добре.

Използване на код от техните собствени примери като насока.

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;
}

Но това не се „чувства“ правилно. .


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 също ще работи, разбира се. Но ако вашият progrssbar е напр. Широчина 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