我想为 QtWidget (QPlainTextEdit) 构建一个自动完成器。我要使用的关键词存储在一个 XML 文件中。有没有一种简单的方法可以将 XML 文件放入 QCompleter?可以使用 QAbstractItemModel 或 QStringList 调用 QCompleter。所以我希望有一个函数可以将我的 XML 文件变成这两件事之一。这是可能的还是我必须逐行读取我的 XML 文件并填写模型或列表?
感谢您的任何提示。
我想为 QtWidget (QPlainTextEdit) 构建一个自动完成器。我要使用的关键词存储在一个 XML 文件中。有没有一种简单的方法可以将 XML 文件放入 QCompleter?可以使用 QAbstractItemModel 或 QStringList 调用 QCompleter。所以我希望有一个函数可以将我的 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(例如,使用QStringListModelclear()
),因为您可以轻松地再次重新填充模型。您还可以在多个QCompleter
实例之间共享相同的模型。