0

std::vector にすべてのデータを含む小さなクラス「Dictionary」があります。このデータを QT アプリケーションで表示したいと考えています。そこで、ちょっとした調査を行ったところ、次のように ListView を使用する必要があることがわかりました。

ui->WordList->setModel(new QStringListModel(QList<QString>::fromVector
                                            (dict->getQVector())));

しかし、これは本当にショーのように見えます。ベクターに新しい要素を追加するたびに、ListView のモデルを更新する必要があります。また、QVector を取得するには、Dictionary クラスに関数を追加する必要があります。

QVector<QString> getQVector() {
  QVector<QString> qv;
  for (size_t i = 0; i < container.size(); i++) {
      qv.push_back(QString::fromStdString((std::string)container[i]));
  }
  return qv;
  }

...そして、これも非常に遅く見えます。質問があります: QTL を使用して Dictionary クラスを書き直す必要がありますか? もしそうなら、便利な方法で ListView (または他の何か) を使用して QVector を表示する方法は? 前もって感謝します。

4

1 に答える 1

1

Dictionary クラスのすべての要件を知らなくても、内部の std::vector を QStringListModel に置き換えて、それをビューのモデルとして設定することをお勧めします。QStringListModel に変更を加えると、ビューに自動的に反映されます。

または、Dictionary クラスを QAbstractItemModel からサブクラス化してモデルにします。std::vector を内部データ構造として保持すると、「data」および「setData」メソッドは std::vector から読み書きすることができます。

Dictionary の目的、ソートされているかどうか、重複したエントリが含まれているかどうかなどについて詳しく知らなければ、適切なデータ構造について確実な推奨事項を作成することは困難です。

于 2016-12-14T21:05:27.440 に答える