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

10-11 18:45