1

QtWidget (QPlainTextEdit) の自動補完機能を構築したいと考えています。使用したいキーワードは XML ファイルに格納されています。QCompleter に XML ファイルを取得する簡単な方法はありますか? QCompleter は、QAbstractItemModel または QStringList で呼び出すことができます。そのため、XML ファイルをこれら 2 つのいずれかに変換する関数があることを期待しました。これは可能ですか、それとも XML ファイルを 1 行ずつ読み取って、モデルまたはリストを埋める必要がありますか?

ヒントをありがとう。

4

1 に答える 1

2

XML からリストへの自動変換はありません。これは主に、XML が任意の構造を持つ可能性があるためです。XML を解析してモデルに入力するために使用できるQXmlStreamReaderクラスがあります。

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);
...

モデル ctor を (たとえば、QStringListModelを使用して) 使用することをお勧めします。たとえば、何らかの構成に基づいて別の XML ファイルからのデータをコンプリータに入力する場合はclear()、モデルを簡単に再入力できるためです。QCompleter複数のインスタンス間で同じモデルを共有することもできます。

于 2017-01-10T09:56:23.993 に答える