- bool FileOperation::copyFile(const QString &source, const QString &destnation)
- {
- QFile sourceFile(source);
- if (!sourceFile.open(QIODevice::ReadOnly))
- {
- return false;
- }
- QFile destFile(destnation);
- if(!destFile.open(QIODevice::WriteOnly))
- {
- return false;
- }
- while (true)
- {
- QByteArray tmpData = sourceFile.read(2048 * 1024);
- if(tmpData.isEmpty())
- {
- break;
- }
- destFile.write(tmpData);
- QApplication::processEvents();
- }
- if (!QFile::copy(source, destnation))
- {
- return false;
- }
- QApplication::processEvents();
- return true;
- }
如上,这是一个复制的函数,我用QTreeView做的一个文件管理器,其中复制的时候,复制结束总是不能正确获得文件的真实大小,比如,拷贝一个5M的文件,但是拷贝到新
目录结束之后显示4M,而且只要超过4M的文件复制过后都显示4M,需要重新进入一个
文件夹或者返回以下这个新拷贝来的文件才
显示大小正常,经测试,发现是用了QApplication::processEvents();的原因,注释掉这行之后,大小就显示正常了,但是没有QApplication::processEvents();也不行阿,滚动条会假死的,请高人帮我分析下究竟是怎么回事,怎么解决这个
问题呢?怎么保证复制的时候
界面不卡死,大小也显示正常呢