Synchronizer QML Type
Sincroniza los valores entre dos o más propiedades. Más...
| Import Statement: | import Qt.labs.synchronizer |
| Since: | Qt 6.10 |
Propiedades
- sourceObject : QtObject
- sourceProperty : string
- targetObject : QtObject
- targetProperty : string
Señales
- valueBounced(QtObject object, string property)
- valueIgnored(QtObject object, string property)
Descripción detallada
Un objeto Sincronizador enlaza dos o más propiedades de forma que un cambio en cualquiera de ellas actualiza automáticamente todas las demás. Al hacerlo, no se rompe ninguno de los enlaces de ninguna de las propiedades. Puede utilizar Synchronizer si la dirección del flujo de datos entre dos propiedades no está predeterminada. Por ejemplo, un TextInput puede inicializarse con un valor del modelo, pero también debe actualizar el valor del modelo cuando finalice la edición.
Nota: Los elementos de entrada proporcionados por Qt Quick y Qt Quick Controls resuelven este problema proporcionando señales de interacción del usuario separadas de las señales de cambio de valor y ocultando las asignaciones de valor en código C++. Usted no necesita Synchronizer para sus funciones internas. Sin embargo, todavía puede ser útil cuando se conecta un control a un modelo.
Considere el siguiente ejemplo.
Sin Synchronizer
// MyCustomTextInput.qml
Item {
property string text
function append(characters: string) { text += characters }
[...]
}Usted puede estar inclinado a poblar la propiedad text desde un modelo y actualizar el modelo cuando la señal textChanged es recibida.
// Does not work! Item { id: root property string model: "lorem ipsum" MyCustomTextInput { text: root.model onTextChanged: root.model = text } }
Esto no funciona. Cuando se llama a la función append, la propiedad text se modifica, y el enlace que la actualiza desde la propiedad model se rompe. La próxima vez que se actualice model independientemente text ya no se actualizará.
Para solucionar esto, puedes omitir el binding por completo y utilizar sólo señales para actualizar ambas propiedades. De esta manera tendrías que renunciar a la comodidad de los enlaces.
También puedes utilizar Synchronizer.
Con Synchronizer
Item { id: root property string model: "lorem ipsum" MyCustomTextInput { Synchronizer on text { property alias source: root.model } } }
Synchronizer se asegura de que cada vez que el modelo o el texto cambian, el otro se actualiza.
Puedes especificar las propiedades a sincronizar de varias maneras:
- Utilizando la sintaxis
on - Rellenando las propiedades
sourceObjectysourceProperty - rellenando las propiedades
targetObjectytargetProperty - Creando alias en el ámbito del sincronizador
El siguiente ejemplo sincroniza cuatro propiedades diferentes, ejerciendo todas las diferentes opciones:
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 } }
Opcionalmente, Synchronizer realizará una sincronización inicial:
- Si uno de los alias se llama
source, se utilizará para inicializar las demás propiedades. - De lo contrario, si los valores asignados a sourceObject y sourceProperty denotan una propiedad, dicha propiedad se utilizará como fuente para la sincronización inicial.
- De lo contrario, si se utiliza la sintaxis
on, se utilizará como fuente para la sincronización inicial la propiedad sobre la que se cree el sincronizador de ese modo. - En caso contrario, no se realiza ninguna sincronización inicial. Sólo cuando una de las propiedades cambie se actualizarán las demás.
El Sincronizador se desincroniza automáticamente. Mientras se está sincronizando utilizando un valor dado como fuente, no acepta más actualizaciones de una de las propiedades que se espera que sea el objetivo de la actualización. De lo contrario, se producirían bucles de actualización infinitos. Synchronizer utiliza la señal valueBounced para notificar esta condición. Además, detecta las propiedades que rechazan silenciosamente una actualización y emite la señal valueIgnored para ellas. El silencio, en este contexto, se determina por la falta de una señal de cambio después de llamar al setter de la propiedad dada.
Si las propiedades a sincronizar son de distinto tipo, se aplican las coerciones de tipo habituales de QML.
Nota: No es posible crear un alias para una propiedad de un singleton. Cuando utilice Synchronizer junto con singletons, utilice sourceObject y sourceProperty y las propiedades de destino respectivas.
Documentación de propiedades
sourceObject : QtObject
Esta propiedad contiene la parte sourceObject del par sourceObject/sourceProperty que juntos pueden especificar una de las propiedades que Synchronizer sincronizará.
sourceProperty : string
Esta sourceProperty contiene la parte sourceProperty del par sourceObject/sourceProperty que, juntas, pueden especificar una de las propiedades que Synchronizer sincronizará.
targetObject : QtObject
Esta propiedad contiene la parte targetObject del par targetObject/targetProperty que, juntas, pueden especificar una de las propiedades que Synchronizer sincronizará.
targetProperty : string
Este targetProperty contiene la parte targetProperty del par targetObject/targetProperty que, en conjunto, puede especificar una de las propiedades que Synchronizer sincronizará.
Documentación de señales
valueBounced(QtObject object, string property)
Esta señal se emite si el property del object rechazó un intento de establecer su valor como parte de la sincronización y produjo un valor diferente en respuesta. Tales valores rebotados se ignoran y no desencadenan otra ronda de sincronización.
Nota: El manejador correspondiente es onValueBounced.
valueIgnored(QtObject object, string property)
Esta señal se emite si property del object no respondió a un intento de establecer su valor como parte de la sincronización.
Nota: El manejador correspondiente es 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.