IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Accéder à des objets C++


Sujet :

Qt Quick

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut Accéder à des objets C++
    Bonjour,

    Je souhaiterais accéder aux propriétés d'un objet que j'ai créé dans la partie C++ de mon appli. J'ai essayé de mettre Q_INVOKABLE devant mais ça ne marche qu'avec les attribut. Comment est-ce que je peux faire ça?

    Exemple:
    J'ai un objet film ayant un titre (QString), un synopsis (QString), etc...
    Je voudrais pouvoir faire monFilm.titre dans la partie QML.

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    http://sfabry.developpez.com/tutorie...atience/#LII-A
    Je pense que la partie II-B devrait solutionner mon problème. J'ai pas encore bien compris comment ça marchait pour l'instant.

  3. #3
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Bonjour,

    À partir du moment où votre classe hérite de Q_OBJECT, vous pouvez utiliser Q_PROPERTY dans la classe de sorte de déclarer de nouvelles propriétés qui seront accessibles au contexte QML tel que vous le souhaitez.

    N'hésitez pas à demander si vous ne comprenez pas certains éléments associés.

    Bonne journée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Est-ce que ce genre de propriété peut s'actualiser?
    Je veux dire par là que je vais demander les infos d'un film lors du clic sur une jaquette. Si je veux les infos d'un autre film, je vais modifier les valeurs des propriétés de ma variable film puis les afficher dans le QML. J'avais réussi à modifier dynamiquement un modèle. Est-ce que je suis obligé là aussi de faire une méthode qui va actualiser les infos ou est-ce que ça se fait tout seul? Dans l'exemple du solitaire, j'ai l'impression qu'il y a une propriété contextuelle de créée pour chaque carte.

  5. #5
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Bonsoir,

    L'intérêt de la Q_PROPERTY est effectivement l'actualisation automatique. Cela peut se faire via le signal NOTIFY passé à la Q_PROPERTY, qu'il faut bien émettre dans la fonction WRITE ainsi passée :

    Code qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Q_PROPERTY(QString prop READ getProp WRITE setProp NOTIFY propChanged)
     
    signals:
        void propChanged();
     
    public slots:
        QString getProp() const { 
            return _p;
        }
        void setProp(QString p) {
            _p = p;
            emit propChanged();
        }
     
    private:
        QString _p;

    Bonne soirée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 402
    Par défaut
    Pour faire les choses un peu plus proprement et en respectant les "habitudes" de Qt :
    Code qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Q_PROPERTY(QString prop READ prop WRITE setProp NOTIFY propChanged)
     
    signals:
        void propChanged();
     
    public:
        QString prop() const { 
            return m_p;
        }
     
        void setProp(const QString &p) {
            if (m_p != p) {
                m_p = p;
                emit propChanged();
            }
        }
     
    private:
        QString m_p;
    - éviter les noms commençant par _
    - pas de get sur le getter
    - tester si la propriété est effectivement changée, sinon ne pas émettre le signal
    - éviter de mettre en slot si pas nécessaire (c'est possible, cf par exemple QWidget::setVisible, mais c'est pas une habitude par défaut)

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Merci, cela semble être exactement ce dont j'ai besoin. J'essaye ça dès que j'ai du temps et je vous dis si ça marche.

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Super c'est exactement ce qu'il me fallait et ça marche impeccable! Merci pour vos réponse claires et précises. J'ai compris en un éclair grâce à vous.

    Cordialement

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/10/2012, 12h39
  2. [2.x] [Twig] Accèder à des objets liés
    Par jekif dans le forum Symfony
    Réponses: 6
    Dernier message: 04/04/2012, 14h16
  3. Accéder à des objets créés à la volée
    Par rvbp13 dans le forum Qt
    Réponses: 1
    Dernier message: 02/08/2010, 21h39
  4. Réponses: 3
    Dernier message: 24/08/2008, 03h30
  5. Accéder à des objets d'une Form à partir d'une classe
    Par kinouseb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/01/2007, 18h07

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