QMLのListModelとしてQListを操作する方法を理解するために、この例に従っています。C++からQML ListModelに要素を追加する
C++からリストを変更したいと思います。したがって、リストを新しいQObjectに入れてタイマーを使用できるようにしました。タイマーコールバックでは、既存の要素の色を変更し、新しい要素をリストに追加します。
void MyObject::setList(QList<QObject *>* l)
{
list = l;
QTimer* timer = new QTimer;
connect(timer, SIGNAL(timeout()), this, SLOT(addElement()));
timer->start(2000);
}
void MyObject::addElement()
{
list->append(new DataObject("Item 1", "red"));
((DataObject *) list->at(0))->setColor("blue");
}
色の変更はQMLで表示されますが、QMLsListViewのリストの長さは変更されません。私は何が欠けていますか? QMLにリストのサイズ変更を認識させるために必要なステップは何ですか?
私はどのように私は、リストの長さにこれを翻訳していますか?色と名前のプロパティがQ_PROPERTYのmakroを通じて登録されている
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
を理解しますか
私は、最も簡単な方法が学習を始める最良の方法だと思っていました...ありがとう! –
シンプルは「不必要な複雑さは非常に悪い」と同じですが、「最も単純な」ものも「非常に限られている」傾向があります。 – dtech
@Gegeカスタムリストモデルは、実際にはQListをプロパティとして公開するよりはるかに複雑ではありません。 2つのQObjectベースのクラスを行う必要がないので、実際には簡単です。 カスタムモデルでは、好きなデータ構造にデータを入れることができます。例えば、単純なクラスや構造体、タプルの配列など しかし、学習していると言われているので、リストを公開しているプロパティが変化したときに通知信号を出すことによって、最初の問題を解決します。あなたは他の機会にこのテクニックが必要になります –