I'm having an issue with a Qt GUI progress bar. The problem is that for larger files, 350MB and above... the progress bar works as expected towards the start and then it seemingly does not move for some time, then suddenly it jumps to 100% when the job is done. I'm not sure why this is happening, I was wondering if there was some Qt mystery causing this or whether I am doing something wrong.
#include "aClass.h"
#include <QString>
#include <QTextStream>
#include <QByteArray>
#include <QFile>
const char aClass::BLOCK_MODE_CBC = 1;
aClass::aClass()
{
}
qint64 aClass::doWorkA (const QString fileNameSrc, const QString fileNameDst, byte * a, byte * b, aBitSizeInBytes sizeaBytes, RWBufferSizeInBytes rwBufferSize)
{
QFile infile(fileNameSrc);
QFile outfile(fileNameDst);
if(!infile.open(QIODevice::ReadOnly))
return -1;
if(!outfile.open(QIODevice::WriteOnly))
return -1;
qint64 sizeOfOriginalFileInBytes = infile.size();
//Set range for progress bar
int progressMax = sizeOfOriginalFileInBytes / rwBufferSize;
if(progressMax == 0)
progressMax = 1;
emit setRange(0, progressMax);
byte* readDataBuffer = new byte[rwBufferSize];
byte* writeDataBuffer = new byte[rwBufferSize];
qint64 readSize = 0;
qint64 writeSize = 0;
int progressCounter = 0;
while (!infile.atEnd()) {
readSize = infile.read((char*)readDataBuffer, rwBufferSize);
writeSize = readSize;
something.changeData(writeDataBuffer, readDataBuffer, writeSize);
outfile.write((char*)writeDataBuffer, writeSize);
//Update progress bar value
emit setValue(++progressCounter);
}
delete[] readDataBuffer;
delete[] writeDataBuffer;
infile.close();
outfile.close();
return 0;
}