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

时间:2015-02-14 03:41:35

标签: c# c++ qt qlistview qfile

使用 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

1 个答案:

答案 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);