Конвертировать файл 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 экземпляров.

Другие вопросы по тегам