Exposer des modèles C++ imbriqués à QML
Bien que ce cas d'imbrication puisse sembler rare en pratique, le fait que XML n'ait pas de support direct pour les modèles arborescents rend l'utilisation de modèles C++ imbriqués très utile pour obtenir une structure en arbre.
Un exemple de cas pratique où les modèles imbriqués sont utiles est le stockage de conversations Facebook. Un mur Facebook est constitué de notifications sociales (modèle racine), chacun pouvant avoir des commentaires (modèles internes).
Exposer des modèles C++ imbriqués à QML
donner un parent C++ à l'object passé à QML
Merci, cette technique m'a été très utile.
Mais juste un truc: il faut absolument donner un parent C++ à m_comment quant on le passe à QML via une fonction 'QObject *function()'. Sans cela j'obtenais des plantages bien mystérieux dans mon projet. En fait, c'était le ramasse-miète javascript qui détruisait mon object m_comment dans QML, sans que je ne lui ai demandé, car il pensait qu'il était orphelin.
J'ai même cru à un bug QtQuick au début, car je n'arrivait vraiment pas à comprendre ce qu'il ce passait. Je voyais juste qu'en utilisant mon application, à un moment donnée, mon object m_comment (enfin, son équivalent dans mon projet) était subitement détruit, sans arriver à en comprendre la raison et aboutissant au crash de mon programme.
Mais en fait, tous est expliqué là:
http://qt-project.org/doc/qt-5/qtqml...data-ownership
Donc dans l'exemple, le FIXME du constructeur de SocialUpdateItem est important. Ça doit être quelque chose comme ça:
Code:
m_comment = new CommentClass(this)
L'autre alternative est d'appeler setObjectOwnership:
Code:
view.setObjectOwnership(m_comment, QQmlEngine::CppOwnership);