如何使用文本文件中的内容填充Qt ListView

How to populate Qt ListView with content from a text file?

本文关键字:填充 Qt ListView 何使用 文本 文件      更新时间:2023-10-16

我有一个文本文件,其中包含许多词汇表,每个词汇表都用一行新行分隔。

如何使用文本文件中的词汇表填充Qt ListView?

QStringListModel *model;
// Create model
model = new QStringListModel(this);
QStringList stringList;
// open the file
QFile textFile("/<FullPath>/<fileName>");
if(!textFile.open(QIODevice::ReadOnly)) {
    QMessageBox::information(0,"Error",textFile.errorString());
}
// teststream to read from file
QTextStream textStream(&textFile);
while (true)
{
    QString line = textStream.readLine();
    if (line.isNull())
        break; 
    else
        stringList.append(line); // populate the stringlist
}
// Populate the model
model->setStringList(stringList);
// Glue model and view together
ui->listView->setModel(model);
// if you want to add additional feature to listview.
ui->listView->
        setEditTriggers(QAbstractItemView::AnyKeyPressed |
                        QAbstractItemView::DoubleClicked);

您需要逐行读取文件,并将其添加到QStringList中,然后添加到listView中。

 QStringList *allLines = new QStringList(); //Your list for lines from the file.
 allLines->clear();
 QStringListModel *linesModel = new QStringListModel(*allLines, NULL); //Your model to set to the view.
 QFile file("/path/to/yourFileName.txt");
 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
     return;
 while (!file.atEnd()) {
     QByteArray line = file.readLine(); //Lines are read as QByteArray.
     const char *line_c = line.data(); //convert to const char*
     QString line_str = QString(QLatin1String(line_c)); //And finally convert to QString
     allLines->append(line_str); //Add to the list
 }
 linesModel->setStringList(*allLines); //Set your model's list your stringlist
 listView->setModel(linesModel); //set model of your listView linesModel. You need to use your listView's name, which might be ui->listView.