C# 从QFile的内容填充QListView的最快方法是什么?
使用QFile,我正在阅读一个纯文本文件,其中包含16280个词汇,每一个都在一行中。然后我将内容逐行添加到QStringList。QStringList被输入到一个QStringListModel中,该模型填充QListView 将QFile内容逐行添加到QStringList会让我等很长时间。这是我的密码:C# 从QFile的内容填充QListView的最快方法是什么?,c#,c++,qt,qlistview,qfile,C#,C++,Qt,Qlistview,Qfile,使用QFile,我正在阅读一个纯文本文件,其中包含16280个词汇,每一个都在一行中。然后我将内容逐行添加到QStringList。QStringList被输入到一个QStringListModel中,该模型填充QListView 将QFile内容逐行添加到QStringList会让我等很长时间。这是我的密码: void主窗口::populateListView() { qelasedtimer elasedtimer; elapsedTimer.start(); //创建模型 stringL
void主窗口::populateListView()
{
qelasedtimer elasedtimer;
elapsedTimer.start();
//创建模型
stringListModel=新的QStringListModel(本);
//打开文件
QFile文件(“Data\\zWordIndex.txt”);
如果(!file.open(QFile::ReadOnly | QFile::Text)){
statusBar()->showMessage(“无法打开文件:+file.fileName());
}
//要从文件中读取的teststream
QTextStream textStream(&file);
while(true)
{
QString line=textStream.readLine();
if(line.isNull())
打破
其他的
追加(行);//填充stringList
}
//填充模型
stringListModel->setStringList(stringList);
//将模型和视图粘合在一起
ui->listView->setModel(stringListModel);
//选择第一个listView索引并填充TextBrowser
常量QModelIndex&index=stringListModel->index(0,0);
ui->listView->selectionModel()->select(索引,QItemSelectionModel::select);
populateTextBrowser(索引);
//表演时间
statusBar()->showMessage(“加载到”+QString::number(elapsedTimer.appeased())+“毫秒”);
}
在这里使用QTextSteam
不会给您带来任何好处,它只会带来一些开销。直接使用QFile
可能要快得多:
while (!file.atEnd())
{
QByteArray lineData = file.readLine();
QString line(lineData);
stringList.append(line.trimmed()); // populate the stringlist
}
另一种方法是使用readAll
读取整个文件,并使用split
解析它:
stringList = QString(file.readAll()).split("\n", QString::SkipEmptyParts);
上面代码段的哪部分占用的时间最长?这部分代码占用的时间最长:
while(true){QString line=textStream.readLine();if(line.isNull())break;else stringList.append(line);}
如果读取文件的时间比读取其他文件的时间长,则必须优化此部分。用read(char*data,qint64 maxSize)读取整个文件,然后解析它怎么样?我可以通过file.readAll()
一次读取整个文件。但是如何在瞬间解析它呢?您能给我举个例子吗?while条件while(file.canReadLine())
不起作用。它什么也不读。但是while条件while(!file.atEnd())
有效。还有QByteArray lineData=file.readLine();QString行(lineData);stringList.append(行)
在stringList
的每一行的底部生成一个额外的填充。然而,QTextSteam
方法并没有产生这种效果。非常感谢。代码stringList=QString(file.readAll()).split(“\n”,QString::skipmptyparts)
真的很快,比while
循环方法快。我现在很高兴。再次非常感谢。:)那么,哪两种方法最快?@ USER 2672165,第二种方法似乎更快。第二种方法是更快的C++方法。然而,与它的C#等效方法相比,listBox1.DataSource=System.IO.File.ReadAllLines(filePath)代码>,第二种方法与C#方法相比仍然慢3-4毫秒。我想要一个C++应用程序,因为我认为C++是所有编程语言中最快的。但我不知道;我不知道为什么在这种情况下C#是最快的。