Je suis confronté à un gros problème qui prend beaucoup de temps à être résolu parce que je n'en connais pas la cause et que je ne sais pas comment le résoudre. Le problème est très simple : J'ai un exemple de composant QML défini comme suit :
Rectangle {
id: rect
property bool test: myclass.testproperty
Rectangle {
width: 50
height: 50
visible: parent.test
}
}
et j'ai connecté un signal MouseArea onClicked pour ce faire :
test = !test
Je modifie donc la valeur de la variable booléenne. Pour faire passer la valeur de C++ à QML et de QML à Q_PROPERTY C++ avec les signaux READ, WRITE et NOTIFY, j'ai utilisé ceci
Binding {
target: myclass
property: "testproperty"
value: rect.test
}
tout fonctionne bien jusqu'à ce que je clique sur la mouseArea et que je transmette les modifications par le biais de la liaison. Après cela, chaque fois que j'essaie de définir une nouvelle valeur de propriété à partir de C++, je ne vois aucun changement dans QML, comme si le binding était détruit. Mais si j'essaie de cliquer sur la MouseArea, j'appelle toujours la méthode setTestProperty de la classe C++. En fait, il y a une désynchronisation entre C++ et QML. Pourquoi ? Je ne trouve pas le problème, le signal est émis parce que QSignalSpy me donne 1 comme nombre de fois où il a été émis après avoir utilisé
emit this->testPropertyChanged(newvalue)
EDIT
Voici un exemple : nous utilisons une propriété QString avec les mêmes signaux. La seule chose qui change est qu'au lieu d'utiliser un élément QML Rectangle et de le lier à une propriété propre, j'utilise un élément TextInput.
TextInput {
id: mytext
text: myclass.testproperty
}
Binding {
target: myclass
property: "testproperty"
value: mytext.text
}