Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从QFile的内容填充QListView的最快方法是什么?_C#_C++_Qt_Qlistview_Qfile - Fatal编程技术网

C# 从QFile的内容填充QListView的最快方法是什么?

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

使用QFile,我正在阅读一个纯文本文件,其中包含16280个词汇,每一个都在一行中。然后我将内容逐行添加到QStringListQStringList被输入到一个QStringListModel中,该模型填充QListView

QFile内容逐行添加到QStringList会让我等很长时间。这是我的密码:

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#是最快的。