Synchronizer QML Type
두 개 이상의 속성 간의 값을 동기화합니다. 더 보기...
Import Statement: | import Qt.labs.synchronizer |
Since: | Qt 6.10 |
속성
- sourceObject : QtObject
- sourceProperty : string
- targetObject : QtObject
- targetProperty : string
신호
- valueBounced(QtObject object, string property)
- valueIgnored(QtObject object, string property)
자세한 설명
동기화 개체는 두 개 이상의 속성을 함께 바인딩하여 그 중 하나를 변경하면 다른 모든 속성이 자동으로 업데이트되도록 합니다. 이 과정에서 어떤 속성의 바인딩도 깨지지 않습니다. 두 속성 간의 데이터 흐름 방향이 미리 정해져 있지 않은 경우 동기화기를 사용할 수 있습니다. 예를 들어 TextInput 을 모델 값으로 초기화할 수 있지만 편집이 완료되면 모델 값도 업데이트해야 합니다.
참고: Qt Quick 및 Qt Quick Controls 에서 제공하는 입력 요소는 값 변경 신호와 별도로 사용자 상호작용 신호를 제공하고 C++ 코드에서 값 할당을 숨겨서 이 문제를 해결합니다. 이러한 내부에는 동기화 도구가 필요하지 않습니다. 그러나 컨트롤을 모델에 연결할 때는 여전히 유용할 수 있습니다.
다음 예시를 살펴보겠습니다.
싱크로나이저 없이
// MyCustomTextInput.qml Item { property string text function append(characters: string) { text += characters } [...] }
모델에서 text
속성을 채우고 textChanged
신호가 수신되면 모델을 업데이트하려는 경향이 있을 수 있습니다.
// Does not work! Item { id: root property string model: "lorem ipsum" MyCustomTextInput { text: root.model onTextChanged: root.model = text } }
이것은 작동하지 않습니다. append
함수가 호출되면 text
속성이 수정되고 model
속성에서 이를 업데이트하는 바인딩이 끊어집니다. 다음 번 model
이 독립적으로 업데이트될 때 text
은 더 이상 업데이트되지 않습니다.
이 문제를 해결하려면 바인딩을 완전히 생략하고 두 프로퍼티를 업데이트하는 신호만 사용하면 됩니다. 이렇게 하면 바인딩의 편리함을 포기해야 합니다.
또는 싱크로나이저를 사용할 수 있습니다.
싱크로나이저 사용
Item { id: root property string model: "lorem ipsum" MyCustomTextInput { Synchronizer on text { property alias source: root.model } } }
싱크로나이저는 모델이나 텍스트 중 하나가 변경될 때마다 다른 하나가 업데이트되도록 합니다.
여러 가지 방법으로 동기화할 속성을 지정할 수 있습니다:
on
구문 사용sourceObject
및sourceProperty
속성 채우기targetObject
및targetProperty
속성 채우기- 동기화 프로그램 범위에서 별칭 만들기
다음 예는 서로 다른 네 가지 속성을 동기화하여 모든 옵션을 실행합니다:
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 } }
선택 사항으로 동기화 프로그램이 초기 동기화를 수행합니다:
- 별칭 중 하나가
source
인 경우 다른 속성을 초기화하는 데 사용됩니다. - 그렇지 않고 sourceObject 및 sourceProperty 에 할당된 값이 속성을 나타내는 경우 해당 속성이 초기 동기화를 위한 소스로 사용됩니다.
- 그렇지 않고
on
구문을 사용하는 경우 해당 방식으로 동기화 프로그램이 생성된 프로퍼티가 초기 동기화의 소스로 사용됩니다. - 그렇지 않으면 초기 동기화가 수행되지 않습니다. 속성 중 하나가 변경될 때만 다른 속성이 업데이트됩니다.
싱크로나이저는 자동으로 바운스 해제됩니다. 주어진 값을 소스로 사용하여 동기화하는 동안에는 업데이트 대상이 될 것으로 예상되는 속성 중 하나에서 추가 업데이트를 수락하지 않습니다. 이러한 동작은 무한한 업데이트 루프로 이어지기 쉽습니다. 싱크로나이저는 valueBounced 신호를 사용하여 이 상태를 알립니다. 또한 업데이트를 조용히 거부하는 프로퍼티를 감지하여 valueIgnored 신호를 보냅니다. 여기서 침묵은 주어진 프로퍼티에 대한 설정자를 호출한 후 변경 신호가 없는 것으로 결정됩니다.
동기화할 프로퍼티의 유형이 다른 경우 일반적인 QML 유형 강제가 적용됩니다.
프로퍼티 문서
sourceObject : QtObject |
이 프로퍼티는 Synchronizer가 동기화할 프로퍼티 중 하나를 함께 지정할 수 있는 sourceObject/sourceProperty 쌍의 sourceObject 부분을 보유합니다.
sourceProperty : string |
이 sourceProperty는 Synchronizer가 동기화할 속성 중 하나를 함께 지정할 수 있는 sourceObject/sourceProperty 쌍의 sourceProperty 부분을 보유합니다.
targetObject : QtObject |
이 프로퍼티는 Synchronizer가 동기화할 프로퍼티 중 하나를 함께 지정할 수 있는 targetObject/targetProperty 쌍의 targetObject 부분을 보유합니다.
targetProperty : string |
이 대상 프로퍼티는 Synchronizer가 동기화할 프로퍼티 중 하나를 지정할 수 있는 targetObject/targetProperty 쌍의 대상 프로퍼티 부분을 보유합니다.
신호 문서
이 신호는 object 의 property 가 동기화의 일부로 값을 설정하려는 시도를 거부하고 이에 대한 응답으로 다른 값을 생성한 경우 발생합니다. 이러한 반송된 값은 무시되며 다른 동기화 라운드를 트리거하지 않습니다.
참고: 해당 핸들러는 onValueBounced
입니다.
이 신호는 object 의 property 가 동기화의 일부로 값을 설정하려는 시도에 응답하지 않은 경우에 발생합니다.
참고: 해당 핸들러는 onValueIgnored
입니다.
© 2025 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.