从 QFile 的内容填充 QListView 的最快方法是什么?
What is the fastest method to populate a QListView from the content of a 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);
,它是如此之快,快如闪电。
这次我使用 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);
使用 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);
,它是如此之快,快如闪电。
这次我使用 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);