将 XML 文件转换为 QAbstractItemModel



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

感谢您的任何提示。

没有从 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);
...

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

相关内容

  • 没有找到相关文章

最新更新