2011-04-07 2 views
2

Je travaille sur une application de bureau qui utilise une interface graphique QML avec beaucoup de composants QML. Ce sont des éléments de la hiérarchie:Navigation et adressage QMLComponents

main -> toolbar -> searchbar -> editfield 

et

main -> resultlist -> header -> button1 

Je ne pouvais pas trouver un moyen d'accéder au contenu du texte de editfield dans un gestionnaire de signal pour button1. Est-ce possible de le faire en QML ou en Javascript?

Je sais que je peux accéder à l'élément dans la partie C++ en utilisant la propriété objectName.

Répondre

3

En raison de QML utilise la portée dynamique (→ Doc), les éléments enfants peuvent accéder aux propriétés de tous les ancêtres et il n'a pas d'importance si elles sont dans des fichiers différents.

Ainsi, vous pouvez ajouter une propriété editFieldText à la propriété principale et lier la propriété text à celle-ci. Ensuite, vous pouvez accéder à editFieldText de partout:

//=== main.qml === 
import QtQuick 1.0 

Rectangle { 
    id: main 

    property string editFieldText 

    Toolbar { 
     // [...] 
    } 

    Resultlist { 
     // [...] 
    } 
} 


//=== EditField.qml === 
import QtQuick 1.0 

TextInput { 
    // bind text property to main.editFieldText 
    Binding { 
     target: main; 
     property: "editFieldText"; 
     value: text 
    } 
} 


//=== Header.qml === 
import QtQuick 1.0 

Rectangle { 
    Button { 
     onClick: { 
      console.log(main.editFieldText); 
      // or simply 
      console.log(editFieldText); 
     } 
    } 
} 
+0

J'ai dû ajouter un ID au composant TextInput ("myid"), puis utiliser "value: myid.text" dans la liaison. – hmuelner

1

Vous pouvez utiliser les propriétés d'alias pour avoir editfield.text comme propriété de main. Cette propriété devrait être accessible à partir de button1.

+0

J'ai essayé mais a échoué parce que vous pouvez seulement afaik propriétés d'alias d'un niveau au-dessous des composants actuels. – hmuelner

+0

Cette solution fonctionne si vous passez de la portée la plus interne à la portée de niveau supérieur et propagez la propriété d'un niveau dans tous les cas. – hmuelner