我想为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
实例之间共享同一模型。