У меня есть текстовый файл, который содержит много словарей, каждая лексика разделяется новой строкой.Как заполнить Qt ListView содержимым из текстового файла?
Как я могу заполнить Qt ListView словарями из текстового файла?
У меня есть текстовый файл, который содержит много словарей, каждая лексика разделяется новой строкой.Как заполнить Qt ListView содержимым из текстового файла?
Как я могу заполнить 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.
Вам следует избегать ненужных указателей. Нет причин для инициализации 'allLines' в куче. Здесь была бы более понятна автоматическая переменная. – thuga
@thuga Да, ты прав. –
Вы можете читать vocabluaries в 'QStringList' и использовать [' QStringListModel'] (http://qt-project.org/doc/qt-4.8/qstringlistmodel.html). – thuga