副線程
#include <QtCore>
#include <QtGui>
class FileRenameRunnable: public QThread
{
Q_OBJECT
public :
FileRenameRunnable(QString const rootPath)
: rootPath_(rootPath)
{
}
virtual void run()
{
for(int i = 0; i != 8448; ++i)
{
QFile file(rootPath_ + "/kkk" + QString::number(i) + ".jpg");
file.rename(rootPath_ + "/jjj" + QString::number(i) + ".jpg");
emit valueChanged(i);
}
}
signals:
void valueChanged(int value);
private:
QString rootPath_;
};
主線程
#include <QtCore>
#include <QtGui>
#include "fineNameRunnable.hpp"
int main(int argc, char **argv)
{
QApplication app( argc, argv );
QFileSystemModel model;
QString const rootPath = "E:/file_test/very big";
QTableView view;
view.setModel(&model);
view.setRootIndex(model.setRootPath(rootPath));
QProgressBar progress;
progress.setRange(0, 8447);
QDir::setCurrent(rootPath);
FileRenameRunnable *myTask = new FileRenameRunnable(rootPath);
app.connect(myTask, SIGNAL(finished()), myTask, SLOT(deleteLater()));
app.connect(myTask, SIGNAL(valueChanged(int)), &progress, SLOT(setValue(int)));
QSplitter splitter;
splitter.addWidget(&view);
splitter.addWidget(&progress);
splitter.show();
myTask->start();
qDebug() << "finish";
return app.exec();
}
不但主線程會被“擋住”,而且連記憶體的使用量也是直線飆升
如果使用的是QDirModel就不會有這種情形
開另外一個線程重新命名,不但主線程運作流暢無比
而且記憶體的使用量和單線程的時候比較也是相差無幾
請問這是QFileSystemModel的bug,或者是我這個新手使用不當?
如果這是bug,請問我該到哪裡通報(或者那個好心人幫我報告也好)?
謝謝