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

What is the fastest method to populate a QListView from the content of a QFile?

使用 QFile,我正在读取一个纯文本文件,其中包含 16,280 个词汇表,每个词汇表占一行。然后我将内容逐行附加到 QStringListQStringList 被馈送到 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);,它是如此之快,快如闪电。

这次我使用 C++Qt 开发我的应用程序。你能告诉我一个类似的方法,最快的方法,从 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);