2015-02-09 88 views
2

我有一个文本文件,其中包含许多词汇表,每个词汇由一个新行分隔。如何用文本文件中的内容填充Qt ListView?

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

+2

你能读懂你的vocabluaries成'QStringList'并使用['QStringListModel'(http://qt-project.org/doc/qt-4.8/qstringlistmodel.html)。 – thuga 2015-02-09 11:34:57

回答

3
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); 
1

您需要逐行读取文件,并添加到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. 
+0

你应该避免不必要的指针。没有理由在堆上初始化'allLines'。自动变量在这里会更有意义。 – thuga 2015-02-10 07:48:37

+0

@thuga是的,你说得对。 – 2015-02-10 16:46:17

相关问题