Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Quick Discussion :

Exposer des modèles C++ imbriqués à QML


Sujet :

Qt Quick

  1. #1
    Responsable Qt & Livres

    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
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre habitué
    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-cppintegration-data.html#data-ownership

    Donc dans l'exemple, le FIXME du constructeur de SocialUpdateItem est important. Ça doit être quelque chose comme ça:
    Code C++ :Sélectionner tout -Visualiser dans une fenêtre à part
    m_comment = new CommentClass(this)

    L'autre alternative est d'appeler setObjectOwnership:
    Code C++ :Sélectionner tout -Visualiser dans une fenêtre à part
    view.setObjectOwnership(m_comment, QQmlEngine::CppOwnership);

  3. #3
    Membre habitué
    Merci du retour.