Synchronizer QML Type
Synchronise les valeurs entre deux ou plusieurs propriétés. Plus d'informations...
| Import Statement: | import Qt.labs.synchronizer |
| Since: | Qt 6.10 |
Propriétés
- sourceObject : QtObject
- sourceProperty : string
- targetObject : QtObject
- targetProperty : string
Signaux
- valueBounced(QtObject object, string property)
- valueIgnored(QtObject object, string property)
Description détaillée
Un objet Synchronizer lie deux propriétés ou plus de sorte qu'une modification apportée à l'une d'entre elles mette automatiquement à jour toutes les autres. Ce faisant, aucune des liaisons sur l'une des propriétés n'est rompue. Vous pouvez utiliser Synchronizer si la direction du flux de données entre deux propriétés n'est pas prédéterminée. Par exemple, un site TextInput peut être initialisé avec une valeur de modèle, mais doit également mettre à jour la valeur de modèle lorsque l'édition est terminée.
Remarque : les éléments d'entrée fournis par les contrôles Qt Quick et Qt Quick résolvent ce problème en fournissant des signaux d'interaction avec l'utilisateur distincts des signaux de changement de valeur et en dissimulant les affectations de valeur dans le code C++. Vous n ' avez pas besoin de Synchronizer pour leur fonctionnement interne. Cependant, il peut s'avérer utile pour connecter un contrôle à un modèle.
Prenons l'exemple suivant.
Sans Synchronizer
// MyCustomTextInput.qml
Item {
property string text
function append(characters: string) { text += characters }
[...]
}Vous pourriez être tenté de remplir la propriété text à partir d'un modèle et de mettre à jour le modèle lorsque le signal textChanged est reçu.
// Does not work! Item { id: root property string model: "lorem ipsum" MyCustomTextInput { text: root.model onTextChanged: root.model = text } }
Cela ne fonctionne pas. Lorsque la fonction append est appelée, la propriété text est modifiée et la liaison qui la met à jour à partir de la propriété model est rompue. La prochaine fois que model est mis à jour indépendamment de text, il n'est plus mis à jour.
Pour résoudre ce problème, vous pouvez omettre complètement la liaison et utiliser uniquement des signaux pour mettre à jour les deux propriétés. De cette façon, vous devrez renoncer à la commodité des liaisons.
Vous pouvez également utiliser Synchronizer.
Avec Synchronizer
Item { id: root property string model: "lorem ipsum" MyCustomTextInput { Synchronizer on text { property alias source: root.model } } }
Synchronizer s'assure que chaque fois que le modèle ou le texte change, l'autre est mis à jour.
Vous pouvez spécifier les propriétés à synchroniser de plusieurs manières :
- En utilisant la syntaxe
on - En remplissant les propriétés
sourceObjectetsourceProperty - En remplissant les propriétés
targetObjectettargetProperty - En créant des alias dans la portée du synchroniseur.
L'exemple suivant synchronise quatre propriétés différentes, en utilisant toutes les options :
Item { id: root property string model: "lorem ipsum" MyCustomTextInput { Synchronizer on text { sourceObject: other sourceProperty: "text" targetObject: root.children[0] targetProperty: "objectName" property alias source: root.model property alias another: root.objectName } } MyCustomTextInput { id: other } }
Optionnellement, Synchronizer effectuera une synchronisation initiale :
- Si l'un des alias s'appelle
source, il sera utilisé pour initialiser les autres propriétés. - Sinon, si les valeurs attribuées à sourceObject et sourceProperty désignent une propriété, cette propriété sera utilisée comme source pour la synchronisation initiale.
- Sinon, si la syntaxe
onest utilisée, la propriété sur laquelle le Synchronizer est créé de cette manière est utilisée comme source pour la synchronisation initiale. - Dans le cas contraire, aucune synchronisation initiale n'est effectuée. Ce n'est que lorsque l'une des propriétés est modifiée que les autres sont mises à jour.
Le Synchronizer se désynchronise automatiquement. Pendant qu'il synchronise en utilisant une valeur donnée comme source, il n'accepte pas d'autres mises à jour de l'une des propriétés censées être la cible de la mise à jour. Un tel comportement conduirait facilement à des boucles de mise à jour infinies. Synchronizer utilise le signal valueBounced pour notifier cette condition. En outre, il détecte les propriétés qui refusent silencieusement une mise à jour et émet le signal valueIgnored pour elles. Le silence, dans ce contexte, est déterminé par l'absence de signal de changement après l'appel du setter pour la propriété donnée.
Si les propriétés à synchroniser sont de types différents, les contraintes de type habituelles de QML sont appliquées.
Note : Il n'est pas possible de créer un alias pour une propriété d'un singleton. Lorsque vous utilisez Synchronizer avec des singletons, utilisez sourceObject et sourceProperty et les propriétés cibles respectives.
Documentation sur les propriétés
sourceObject : QtObject
Cette propriété contient la partie sourceObject de la paire sourceObject/sourceProperty qui, ensemble, peuvent spécifier l'une des propriétés que Synchronizer synchronisera.
sourceProperty : string
Cette sourceProperty contient la partie sourceProperty de la paire sourceObject/sourceProperty qui, ensemble, peuvent spécifier l'une des propriétés que Synchronizer synchronisera.
targetObject : QtObject
Cette propriété contient la partie targetObject de la paire targetObject/targetProperty qui, ensemble, peuvent spécifier l'une des propriétés que Synchronizer synchronisera.
targetProperty : string
Ce targetProperty contient la partie targetProperty de la paire targetObject/targetProperty qui, ensemble, peuvent spécifier l'une des propriétés que Synchronizer synchronisera.
Documentation sur les signaux
valueBounced(QtObject object, string property)
Ce signal est émis si le site property du site object a refusé une tentative de définition de sa valeur dans le cadre de la synchronisation et a produit une valeur différente en réponse. De telles valeurs sont ignorées et ne déclenchent pas un nouveau cycle de synchronisation.
Remarque : le gestionnaire correspondant est onValueBounced.
valueIgnored(QtObject object, string property)
Ce signal est émis si property de object n'a pas répondu à une tentative de définition de sa valeur dans le cadre de la synchronisation.
Remarque : le gestionnaire correspondant est onValueIgnored.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.