将 XML 文件转换为 QAbstractItemModel

Convert XML file to QAbstractItemModel

我想为 QtWidget (QPlainTextEdit) 构建一个自动完成器。我要使用的关键字存储在 XML 文件中。有没有一种简单的方法可以将 XML 文件放入 QCompleter 中?可以使用 QAbstractItemModel 或 QStringList 调用 QCompleter。所以我希望有一个函数可以将我的 XML 文件变成这两个东西之一。这是可能的还是我必须逐行阅读我的 XML 文件并填写模型或列表?

感谢任何提示。

没有从 XML 到列表的自动转换,主要是因为 XML 可以有任意结构。 QXmlStreamReader class 可用于解析 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);
...

如果你想用来自不同 XML 文件的数据填充完成者,例如基于某些配置,你可能想使用模型 ctor(例如 QStringListModel),因为你可以然后轻松 clear() 并再次重新填充模型。您还可以在多个 QCompleter 个实例之间共享同一个模型。