이 페이지에서

Synchronizer QML Type

두 개 이상의 속성 간에 값을 동기화합니다. 더 보기...

Import Statement: import Qt.labs.synchronizer
Since: Qt 6.10

속성

신호

상세 설명

Synchronizer 객체는 두 개 이상의 속성을 서로 바인딩하여, 그중 하나에 변경 사항이 발생하면 다른 모든 속성이 자동으로 업데이트되도록 합니다. 이 과정에서 어떤 속성의 바인딩도 끊어지지 않습니다. 두 속성 간의 데이터 흐름 방향이 미리 정해져 있지 않은 경우 Synchronizer를 사용할 수 있습니다. 예를 들어, TextInput 는 모델 값으로 초기화될 수 있지만, 편집이 완료되면 모델 값도 업데이트되어야 합니다.

참고: Qt Quick 및 Qt Quick Controls 에서 제공하는 입력요소는 값 변경 신호와 별개의 사용자 상호작용 신호를 제공하고, C++ 코드 내의 값 할당을 숨김으로써 이 문제를 해결합니다. 이러한 요소의 내부 처리에는 Synchronizer가 필요하지 않습니다. 그러나 컨트롤을 모델에 연결할 때는 여전히 유용할 수 있습니다.

다음 예제를 살펴보십시오.

Synchronizer 미사용 시

// 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 는 더 이상 업데이트되지 않습니다.

이 문제를 해결하려면 바인딩을 아예 생략하고 두 속성을 모두 업데이트하는 데 신호만 사용할 수 있습니다. 이 경우 바인딩이 제공하는 편의성을 포기해야 합니다.

또는 Synchronizer를 사용할 수 있습니다.

Synchronizer 사용 시

Item {
    id: root
    property string model: "lorem ipsum"
    MyCustomTextInput {
        Synchronizer on text {
            property alias source: root.model
        }
    }
}

Synchronizer는 모델이나 텍스트 중 하나가 변경될 때마다 다른 하나도 반드시 업데이트되도록 보장합니다.

동기화할 속성은 여러 가지 방법으로 지정할 수 있습니다:

  • 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
    }
}

선택적으로, Synchronizer는 초기 동기화를 수행합니다:

  • 별칭 중 하나가 source 인 경우, 이 별칭이 다른 속성을 초기화하는 데 사용됩니다.
  • 그렇지 않은 경우, sourceObject 및 sourceProperty 에 할당된 값이 특정 속성을 나타내면 해당 속성이 초기 동기화의 소스로 사용됩니다.
  • 그 외의 경우, on 구문이 사용되면, 해당 방식으로 생성된 Synchronizer의 속성이 초기 동기화의 소스로 사용됩니다.
  • 그렇지 않은 경우 초기 동기화는 수행되지 않습니다. 속성 중 하나가 변경될 때만 다른 속성들이 업데이트됩니다.

Synchronizer는 자동으로 디바운스(de-bounce)를 수행합니다. 주어진 값을 소스로 사용하여 동기화 중인 동안, 업데이트의 대상이 될 것으로 예상되는 속성 중 하나로부터의 추가 업데이트를 허용하지 않습니다. 그렇지 않으면 이러한 동작으로 인해 무한 업데이트 루프가 쉽게 발생할 수 있습니다. Synchronizer는 ` valueBounced ` 신호를 사용하여 이러한 상태를 알립니다. 또한, 업데이트를 묵묵히 거부하는 속성을 감지하여 해당 속성에 대해 ` valueIgnored ` 신호를 발산합니다. 이 맥락에서 '묵묵함'은 주어진 속성에 대한 세터 호출 후 변경 신호가 없는 것으로 판단됩니다.

동기화할 속성의 유형이 서로 다른 경우, 일반적인 QML 유형 변환이 적용됩니다.

참고: 싱글톤의 속성에 대한 별칭을 생성할수는 없습니다 . Synchronizer를 싱글톤과 함께 사용할 때는 ` sourceObject ` 및 ` sourceProperty `와 해당 대상 속성을 사용하십시오.

속성 문서

sourceObject : QtObject

이 속성은 sourceObject/sourceProperty 쌍 중 sourceObject 부분을 포함하며, 이 두 속성은 함께 Synchronizer가 동기화할 속성 중 하나를 지정할 수 있습니다.

sourceProperty : string

이 sourceProperty는 sourceObject/sourceProperty 쌍 중 sourceProperty 부분을 포함하며, 이 두 요소는 함께 Synchronizer가 동기화할 속성 중 하나를 지정할 수 있습니다.

targetObject : QtObject

이 속성은 targetObject/targetProperty 쌍 중 targetObject 부분을 포함하며, 이 두 속성은 함께 Synchronizer가 동기화할 속성 중 하나를 지정할 수 있습니다.

targetProperty : string

이 targetProperty는 targetObject/targetProperty 쌍 중 targetProperty 부분을 포함하며, 이 두 요소는 함께 Synchronizer가 동기화할 속성 중 하나를 지정할 수 있습니다.

신호 문서

valueBounced(QtObject object, string property)

이 신호는 object 의 property 가 동기화의 일환으로 값을 설정하려는 시도를 거부하고, 이에 대한 응답으로 다른 값을 반환한 경우에 발생합니다. 이러한 반동 값은 무시되며, 새로운 동기화 라운드를 유발하지 않습니다.

참고: 해당핸들러는 ` onValueBounced`입니다.

valueIgnored(QtObject object, string property)

object 의 property 가 동기화 과정의 일환으로 값을 설정하려는 시도에 응답하지 않은 경우 이 신호가 발생합니다.

참고: 해당 핸들러는 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.