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