使用 QFile ,我正在读取一个纯文本文件,该文件包含16,280个词汇,每个词汇都换行。然后,将内容逐行附加到 QStringList 。将 QStringList 馈入到 QStringListModel 中,该模型填充 QListView 。
逐行将 QFile 内容追加到 QStringList 使得我不得不等待很长时间。这是我的代码:
void MainWindow::populateListView()
{
QElapsedTimer elapsedTimer;
elapsedTimer.start();
// Create model
stringListModel = new QStringListModel(this);
// open the file
QFile file("Data\\zWordIndex.txt");
if (!file.open(QFile::ReadOnly | QFile::Text)) {
statusBar()->showMessage("Cannot open file: " + file.fileName());
}
// teststream to read from file
QTextStream textStream(&file);
while (true)
{
QString line = textStream.readLine();
if (line.isNull())
break;
else
stringList.append(line); // populate the stringlist
}
// Populate the model
stringListModel->setStringList(stringList);
// Glue model and view together
ui->listView->setModel(stringListModel);
//Select the first listView index and populateTextBrowser
const QModelIndex &index = stringListModel->index(0,0);
ui->listView->selectionModel()->select(index, QItemSelectionModel::Select);
populateTextBrowser(index);
//Show time
statusBar()->showMessage("Loaded in " + QString::number(elapsedTimer.elapsed()) + " milliseconds");
}
我还用C#开发了相同的应用程序。在C#中,我只使用:
listBox1.DataSource = System.IO.File.ReadAllLines(filePath);
,它是如此之快,闪电般快。这次我将使用 Qt 在 C++ 中开发我的应用程序。您能否告诉我类似的方法,最快的方法,从 QFile 的内容中填充 QListView ?
最佳答案
在这里使用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);
关于c# - 从QFile的内容填充QListView的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28512174/