Christophe Dumezのブログの記事を大まかにフォローして、データをQML(QtQuick2)インターフェイス(QtQuick2ApplicationViewer)に公開するカスタムQAbstractListModelクラスを取得しました。ただし、私はQt 5.0.0(およびMSVC2012)を使用しているため、彼の記事には適用されない部分がいくつかあります。たとえば、Qt 5で減価償却されsetRoleNames()
たため、ListModelコンストラクターはを呼び出す必要がなくなりました。setRoleNames()
ListModel::ListModel(ListItem* prototype, QObject *parent) :
QAbstractListModel(parent), m_prototype(prototype)
{
setRoleNames(m_prototype->roleNames());
}
Qt 5で純粋仮想関数に変更されたため、 QAbstractListModelから継承するクラスは、を定義するだけでよいと理解しています。したがって、彼の例では、コンストラクターでroleNames()
コメントアウトするだけで、すべてが機能するはずです。setRoleNames(m_prototype->roleNames());
右?
ただし、代わりに、QMLを介してアクセスすると、定義されたすべてのロールが未定義になります。私はこれでC++の名前をチェックすることができます:
QHash<int, QByteArray> mynames = model->find("Elephant")->roleNames();
qDebug() << "Model: " << mynames;
この場合、Elephantオブジェクトのロール名は期待どおりに出力されます。
私の仮定は正しいですか、それともQAbstractListModelオブジェクトを取得してリスト要素のプロパティをQML2と共有するために何か他のことをする必要がありますか?これはばかげた質問のように思えますが、Qt5のドキュメントは現在非常に壊れているため、理解できません。
ありがとう!