Конвертировать файл XML в QAbstractItemModel
Я хотел бы построить автозаполнение для QtWidget (QPlainTextEdit). Ключевые слова, которые я хочу использовать, хранятся в файле XML. Есть ли простой способ получить файл XML в QCompleter? QCompleter может быть вызван с QAbstractItemModel или QStringList. Поэтому я надеялся, что есть функция, которая превратит мой XML-файл в одну из этих двух вещей. Возможно ли это, или мне нужно построчно читать мой файл XML и заполнять модель или список?
Спасибо за любые подсказки.
1 ответ
Там нет автоматического преобразования из XML в список, в основном потому, что XML может иметь произвольную структуру. Существует класс QXmlStreamReader, который вы можете использовать для анализа XML и заполнения модели.
Предполагая, что XML выглядит примерно так
<keywords>
<keyword>Foo</keyword>
<keyword>Bar</keyword>
</keywords>
Тогда вам понадобится всего пара строк для его анализа:
QXmlStreamReader reader(xmlFileName);
QStringList keywords;
while (!reader.atEnd()) {
// parse next token
reader.readNext();
// is this an opening "keyword" tag?
if (reader.isStartElement() && reader.name() == QLatin1String("keyword")) {
// add its value to the list
keywords.append(reader.text().toString());
}
}
auto completer = new QCompleter(keywords, lineEdit);
...
Возможно, вы захотите использовать модель ctor (например, с QStringListModel), если вы хотите заполнить завершитель данными из другого XML-файла, например, на основе некоторой конфигурации, поскольку тогда вы можете легко clear()
и снова заполни модель. Вы также можете поделиться одной и той же моделью между несколькими QCompleter
экземпляров.