2015-02-09 4 views
2

У меня есть текстовый файл, который содержит много словарей, каждая лексика разделяется новой строкой.Как заполнить Qt ListView содержимым из текстового файла?

Как я могу заполнить Qt ListView словарями из текстового файла?

+2

Вы можете читать vocabluaries в 'QStringList' и использовать [' QStringListModel'] (http://qt-project.org/doc/qt-4.8/qstringlistmodel.html). – thuga

ответ

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

+0

@thuga Да, ты прав. –

Смежные вопросы