我正在遍历文件夹中的所有文件(递归地通过它的所有子文件夹),但这非常慢......几乎永远不会返回。我可以把它放在一个线程中,但即使比这速度也不实用。这是我的功能
int MainWindow::searchXmlFiles(QString rootDir)
{
xmlFileModel->clear(); // xmlFileModel is QStanardItemModel
int count = 0;
XmlFile xmlFile;
QString xmlFilePath;
QDirIterator iter( rootDir, QStringList() << "*.xml", QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
QDir dir( ui->lineEditSourceFolder->text() );
while(iter.hasNext() )
{
qDebug() << iter.next();
xmlFilePath = iter.filePath();
xmlCollection = xmlFile.openXmlFile( xmlFilePath );
QStandardItem * item = new QStandardItem( QIcon(":/icons/xmlfile.ico") , dir.relativeFilePath( xmlFilePath) );
xmlFileModel->appendRow( item );
count++;
}
QString fileCount = QString("Total of %1 file(s) will be converted from `%2` folder").arg( QString::number(count), rootDir);
ui->labelXmlFileCount->setText( fileCount );
return count;
}
这种速度真的很低吗?有没有办法更快地做同样的事情?
更新
在Jeremey评论之后,如果我评论循环内部的所有工作(xmlFile.openXmlFile()和QStandardItem创建),它会变得非常快,需要3秒钟。如果我在那里创建QStandardItem,大约需要7秒/
答案 0 :(得分:1)
您可以使用QDir :: entryList()一次获取XML文件的完整列表,然后遍历文件名的QStringList。