2011-05-24 5 views
3

J'ai un MouseArea qui appelle un signal, je branche ce signal à un emplacement et il fonctionne, mon code C++ est en cours d'exécution.QT QML changement d'état C++

Mais est-ce possible dans le code C++, changer l'état QML?

code de bouton Signal d'appel (OK):

MouseArea { 
        anchors.fill: parent 
        onClicked: { 
         inscriptionCarre.qmlSignalButtonInscription("Button"); 
        } 
       } 

Code de mes états:

states: [ 
    State { 
     name: "start"; 
     PropertyChanges { target: home; x: -master.width; } 
     PropertyChanges { target: login; x:0; } 
    }, 
    State { 
     name: "loginOK"; 
     PropertyChanges { target: login; x: -master.width; } 
     PropertyChanges { target: liste; x:0; } 
    } 
] 

Je voudrais dans mon emplacement (C++ code) état de changement "loginOK", c'est possible ?

Merci

Répondre

7

Depuis l'état est une propriété d'élément, vous devriez être en mesure de le modifier comme ceci:

QDeclarativeEngine engine; 
QDeclarativeComponent component(&engine, "MyItem.qml"); 
QObject *object = component.create(); 
object->setProperty("state", "loginOK"); 

Référence: http://qt-project.org/doc/qt-4.8/qtbinding.html#modifying-properties

ou de votre C++ emplacement que vous pouvez émettre un signal qui transmet la chaîne d'état à un emplacement QML qui définit à son tour l'état. Par exemple comme:

C++ fichier:

... 
signals: 
    void stateChanged(const QString &newState); 
... 

fichier QML:

... 
MyItem { 
    onStateChanged: { 
     state: newState 
    } 
} 
... 
+0

Question: Je suppose que vous faites 'émettent stateChanged ("loginOK");' après 'object-> setProperty ("état", "loginOK"); Vous ne mentionnez pas comment lier le signal à l'emplacement QML. Pouvez-vous s'il vous plaît fournir l'information. J'utilise 'Connections {...}' pour connecter des signaux C++ aux slots QML mais dans ce cas cela ne déclenche pas le changement dans l'interface utilisateur (puisque dans mon cas basé sur le nouvel état l'élément change (par exemple la 'couleur 'd'un élément' Rectangle'). Le slot ne se déclenche que lorsque vous utilisez 'Connections {...}' Sinon, rien ne se passe.Toute idée? – rbaleksandar

+0

Nevermind.J'ai réussi à le réparer.En effet, dans le dernier Qt on doit utilisez l'élément 'Connections', mais lorsque vous appelez à partir de C++, l'état de tous les éléments visibles dans la liste change.Pour éviter que l'on doive spécifier que seul' currentItem.state' doit être défini sur le nouvel état. – rbaleksandar