+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 140
    Points : 119 117
    Points
    119 117

    Par défaut 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) ? Contactez-moi par MP.

    Nouveau ! 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 à l'essai
    Profil pro
    Inscrit en
    mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2008
    Messages : 33
    Points : 10
    Points
    10

    Par défaut 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 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é
    Homme Profil pro
    Inscrit en
    juillet 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2010
    Messages : 103
    Points : 175
    Points
    175

    Par défaut

    Merci du retour.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POI]Utiliser des modèles de document, c'est possible ?
    Par hugo123 dans le forum Documents
    Réponses: 5
    Dernier message: 04/09/2006, 12h52
  2. Modéliser des modèles de documents
    Par raoudi57 dans le forum Débutant
    Réponses: 5
    Dernier message: 10/11/2005, 20h23
  3. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15
  4. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo