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 :

Binding pour sous-item


Sujet :

Qt Quick

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut C++ et QML binding pour sous-item
    Bonjour, j'ai un probleme de binding C++/QML. Je n'arrive pas a binder un bouton(child element du root) avec un objet. J'y arrive avec le root mais pas le child. Voila le code C++:

    Code C++ : 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_DECL_EXPORT int main(int argc, char *argv[])
    {
        QScopedPointer<QApplication> app(createApplication(argc, argv));
        TimerObject timerObj;
        QDeclarativeView view;
        view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
     
        view.setSource(QUrl("../Resources/qml/qmlcpp/main.qml"));
     
        QGraphicsObject* rootObj = view.rootObject();
        QDeclarativeItem *myButton = rootObj->findChild<QDeclarativeItem*>("mybutton");
     
        int height = myButton->height();
        QDeclarativeContext* ctxButton = qmlContext(myButton);
        ctxButton->setContextProperty("timer", &timerObj);
     
        return app->exec();
    }

    et le Qml :
    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    // import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
    import QtQuick 1.1
     
    Rectangle {
        width: 360
        height: 360
        Text {
            y : 10;
            id:myText
            text: qsTr("Hello World")
            //anchors.centerIn: parent
        }
        MouseArea {
            anchors.fill: parent
            onClicked{
                //Qt.quit();
                //myText.text = timer.getCurrentDateTime();
                //myText.text = "toto";
            }
        }
     
        Button {
             id:mybutton
                anchors.centerIn:parent
                text: "Test Button"
                width: parent.width/2 -10
                objectName: "mybutton"
                onClicked{
                    console.log("Add folder clicked");
                    text= timer.getCurrentDateTime();
                }
            }
    }
    le TimerObject :
    Code C++ : 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
    20
    21
    22
     
    #ifndef TIMEROBJECT_H
    #define TIMEROBJECT_H
    #include <QObject>
    #include <QDateTime>
     
    class TimerObject : public QObject
    {
     
     
        Q_OBJECT
        public:
        TimerObject();
        virtual ~TimerObject();
     
        Q_INVOKABLE QDateTime getCurrentDateTime() const {
            return QDateTime::currentDateTime();
        }
     
    };
     
    #endif // TIMEROBJECT_H

    Je rappelle bien que ca marche nickel si je bind le root au TimerObject avec :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        QDeclarativeContext *ctxt = view.rootContext();
        ctxt->setContextProperty("timer", &timerObj);

    Merci d'avance

  2. #2
    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,

    Je ne vois pas vraiment ce que vous souhaitez faire dans la pratique (quel est le résultat attendu, par exemple). Cependant, au cas où cela pourrait vous éclairer :

    http://louis-du-verdier.developpez.c...communication/

    Bonne soirée,
    Amnell.
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut
    Bonsoir, comme explique je cherche a binder une propriété a mon bouton uniquement. Si je clique sur le bouton je veux lancer une procédure particulière.
    Je ne veux pas le faire sur la root, car je vais avoir plusieurs sous-elements et seuls certains doivent être bindes.
    Votre lien je l'ai déjà étudié, il explique comment parcourir l'arborescence QML mais il n'explique pas comment régler mon souci.

    Cordialement

  4. #4
    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,

    Cela signifie donc que la ligne qui pose problème est :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    QDeclarativeContext* ctxButton = qmlContext(myButton);

    Est-ce que qmlContext fait l'équivalent de QDeclarativeEngine::contextForObject(myButton) ?

    Bonne continuation,
    Amnell.
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut
    voila tu a tout compris, je me doutais bien que le problème venait de cette ligne, mais ca ne marche pas non plus avec :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        QDeclarativeContext* ctxButton = QDeclarativeEngine::contextForObject(myButton);
       // QDeclarativeContext* ctxButton = qmlContext(myButton);
        ctxButton->setContextProperty("timer", &timerObj);

  6. #6
    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,

    Qu'entendez-vous par "ça ne marche pas" ? Une erreur QML se produit lors du clic sur le bouton (timer not found), l'application cesse de fonctionner (segfault), problème de compilation ?

    Bonne continuation,
    Amnell.
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2007, 17h58
  2. [XML] PARSE XML avec multi donnée pour un item ?
    Par gandolfi dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/03/2007, 14h58
  3. Réponses: 1
    Dernier message: 26/10/2006, 17h44
  4. Réponses: 4
    Dernier message: 29/09/2006, 11h53
  5. Context menu Windows - icone pour un item
    Par Cameleon45 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 07/03/2003, 13h48

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