6

これは私の最初の QT の質問です - 私は一般的に C# プログラマーなので、非常に単純な答えがあると確信している愚かな質問をすることを許してください。

リストにアイテムを追加したいのですが、今のところ、それらが文字列であるとしましょう。QListView: UI->listView、 QStringList 、および QStringListModel があります。

stringList = new QStringList();
stringList->append("ABC");
stringList->append("123");

listModel = new QStringListModel(*stringList, NULL);
ui->listView->setModel(listModel);

stringList->append("xyz");

この例では、リスト内の "ABC" と "123" をコンパイルして disaply しますが、"xyz" はコンパイルしません。なぜだめですか?どういうわけかlistViewを再描画する必要がありますか? NULLで何か間違ったことをしましたか?

ありがとう。

4

2 に答える 2

25

文字列リストを頻繁に変更する必要があり、接続されたビューを更新する必要がある場合は、最初に QStringList を廃止し、QStringListModel のみを使用することを検討できます。insertRows/removeRows および setData を使用して、そこにデータを追加/削除できます。これにより、ビューは常に期待どおりにモデルを反映するようになります。これは、面倒な作業を防ぐためにラップできます。(未テスト) のようなもの:

class StringList : public QStringListModel
{
public:
  void append (const QString& string){
    insertRows(rowCount(), 1);
    setData(index(rowCount()-1), string);
  }
  StringList& operator<<(const QString& string){
    append(string);
    return *this;
  }
};
于 2011-04-28T21:14:19.743 に答える
6

QStringListを変更しました。モデルを変更する必要があります。

stringList->append("xyz");
listModel->setStringList(*stringList);
于 2011-04-27T10:06:14.840 に答える