使用 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 ?
答案 0 :(得分:1)
在这里使用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);