2016-12-14 18 views
0

私は小さなクラス "辞書"を持っています。ここで私はすべてのデータをstd :: vectorに入れています。このデータをQTアプリケーションで表示したいと思います。だから、私は小さな研究を行いました。私はこのようにListViewを使うべきであることを発見しました:QTでstd :: vectorを正しく表示する方法は?

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クラスを書き直す必要がありますか?もしそうなら、QVectorをListView(または多分何か他のもの)を使い便利な方法で表示する方法は? ありがとうございます。

+0

http://stackoverflow.com/questions/32084336/how-to-properly-add-strings-to-qlistwidgets –

+0

std :: vectorのデータを直接返すカスタムQAbstractListModelサブクラスを書くことができます –

答えて

1

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

また、QAbstractItemModelからサブクラス化することによって、Dictionaryクラスをモデルにすることもできます。あなたはまだ内部データ構造体としてstd :: vectorを保持することができます。そして、あなたの "data"と "setData"メソッドはstd :: vectorから読み書きします。

辞書がどのようなものであるか、並べ替えられているかどうか、重複した項目が含まれているかどうかなどを理解していないと、適切なデータ構造について強固な推奨をすることは難しいです。

関連する問題