Binding QML Type
속성 바인딩을 자유롭게 생성할 수 있게 해줍니다. 더 보기...
| Import Statement: | import QtQml |
속성
- delayed : bool
- property : string
- restoreMode : enumeration
- target : QtObject
- value : var
- when : bool
자세한 설명
QML에서 속성 바인딩은 서로 다른 객체의 속성 간에 종속성을 형성합니다.
접근할 수 없는 속성에 대한 바인딩
때로는 C++을 통해 QML로 내보낸 클래스의 속성과 같이, QML에 의해 직접 인스턴스화되지 않은 다른 객체의 속성에 객체의 속성을 바인딩해야 할 필요가 있습니다. Binding 유형을 사용하여 이러한 종속성을 설정할 수 있으며, 어떤 값이든 어떤 객체의 속성에나 바인딩할 수 있습니다.
예를 들어, "app.enteredText" 속성을 QML로 매핑하는 C++ 애플리케이션에서 Binding을 사용하여 enteredText 속성을 업데이트할 수 있습니다.
TextEdit { id: myTextField; text: "Please type here..." }
Binding { app.enteredText: myTextField.text }text 가 변경되면 C++ 속성 enteredText 가 자동으로 업데이트됩니다.
조건부 바인딩
경우에 따라 특정 조건이 충족될 때만 속성의 값을 수정하고, 그렇지 않은 경우에는 값을 그대로 두고 싶을 수 있습니다. 직접 바인딩을 사용하면 가능한 모든 분기에 대한 값을 지정해야 하므로, 이를 수행하는 것이 불가능한 경우가 많습니다.
예를 들어, 아래 코드 스니펫은 마우스를 놓을 때마다 경고가 발생합니다. 이는 마우스가 눌려 있지 않을 때 바인딩의 값이 정의되지 않기 때문입니다.
// produces warning: "Unable to assign [undefined] to double value"
targetProperty: if (mouse.pressed) mouse.mouseXBinding 타입을 사용하면 이러한 경고를 방지할 수 있습니다.
Binding on targetProperty {
when: mouse.pressed
value: mouse.mouseX
}Binding 유형은 해당 속성에 이전에 설정된 모든 직접 바인딩을 복원합니다.
그러나 Binding 의 value 속성에 대한 바인딩은 when 가 false 인 경우에도 무조건 평가됩니다.
예를 들어, 바인딩이 ` null` 값을 방지하기 위해 사용되는 경우, 이로 인해 경고가 발생할 수 있습니다:
Binding on targetProperty {
when: root.object !== null
// produces warning: "TypeError: Cannot read property 'someProperty' of null"
value: root.object.someProperty
}이 문제를 피하는 방법은 두 가지가 있습니다:
- 대상(target)에
id가 있는 경우, Multiple targets in one Binding 에 설명된 구문을 사용할 수 있습니다. 이 구문을 사용하면Binding가 활성화된 경우에만 바인딩 표현식이 실행됩니다:Binding { when: root.object !== null root.targetProperty: root.object.someProperty } - 바인딩 내에서 해당 검사를 반복하고 조기에 반환할 수 있습니다:
Binding on targetProperty { when: root.object !== null value: { if (root.object === null) return return root.object.someProperty } }
하나의 Binding 요소에 여러 대상 포함
하나의 Binding 요소 내에서 동일한 객체에 대한 여러 바인딩을 지정할 수 있습니다:
Text {
id: t1
}
Binding {
t1 {
color: "#00FF00"
text: "green text"
}
}또한 하나의 Binding 요소 내에서 서로 다른 대상 객체를 가진 여러 바인딩을 지정할 수도 있습니다:
Text {
id: t1
}
Text {
id: t2
}
Binding {
t1.text: "Foo"
t2.text: "Bar"
}참조 Qt Qml.
속성 문서
delayed : bool
이 속성은 바인딩을 지연해야 하는지 여부를 지정합니다.
지연 바인딩은 대상 값을 즉시 업데이트하지 않고, 이벤트 큐가 모두 처리될 때까지 기다립니다. 이는 최적화 목적으로 사용되거나, 중간 값이 할당되는 것을 방지하기 위해 사용할 수 있습니다.
Binding {
contactName.text.value: givenName + " " + familyName
when: list.ListView.isCurrentItem
delayed: true
}참고: delayed 속성을사용하면 Binding 요소가 실제 대상에 대한 적용을 지연할 수 있도록 값에 대한 프록시를 생성해야 하므로 런타임 비용이 발생합니다. target 및 property 속성을 사용할 경우, value 속성을 프록시로 재사용할 수 있으므로 이 비용이 더 낮습니다. 위에서 보여준 형식을 사용할 경우, Binding은 프록시 값을 보관하기 위해 동적 메타 객체를 가진 별도의 객체를 할당합니다.
property : string
업데이트할 속성.
표현식의 결과로 값 유형의 속성에 접근하게 되는 경우, 이는 그룹 속성이 될 수 있습니다. 예를 들어:
Item {
id: item
property rect rectangle: Qt.rect(0, 0, 200, 200)
}
Binding {
target: item
property: "rectangle.x"
value: 100
}이 속성은 바인딩 대상을 선언적으로 지정할 수 없는 경우에만 사용하면 됩니다. 다음 코드 조각은 위의 바인딩과 동일하지만 더 간결합니다:
Binding { item.rectangle.x: 100 }restoreMode : enumeration
이 속성은 바인딩이 비활성화될 때 원래 값을 복원해야 하는지, 그리고 어떻게 복원해야 하는지를 설명하는 데 사용할 수 있습니다.
사용 가능한 값은 다음과 같습니다:
| Constant | 설명 |
|---|---|
Binding.RestoreNone | 원래 값은 전혀 복원되지 않습니다 |
Binding.RestoreBinding | 원래 값이 다른 바인딩이었던 경우, 원래 값이 복원됩니다. 이 경우 이전 바인딩이 다시 적용됩니다. |
Binding.RestoreValue | 바인딩이 아닌 단순 값인 경우 원래 값이 복원됩니다. |
Binding.RestoreBindingOrValue | 원래 값은 항상 복원됩니다. |
기본값은 ` Binding.RestoreBindingOrValue`입니다.
참고: 이 속성은 이전 버전의 Qt와의 하위 호환성을 위해 존재합니다. 새로운 코드에서는 사용하지 마십시오.
target : QtObject
업데이트할 객체입니다. 바인딩 대상에 ` id ` 속성이 없는 경우(예: 대상이 싱글톤인 경우) 이 속성을 사용해야 합니다. 그렇지 않은 경우, 다음 두 코드 조각은 동일합니다:
Binding { contactName.text: name }Binding {
target: contactName
property: "text"
value: name
}전자가 훨씬 간결하지만, 런타임에 대상 객체나 속성을 교체할 수는 없습니다. 후자의 경우, 교체할 수 있습니다.
value : var
대상 객체와 속성에 설정할 값입니다. 이는 상수(별로 유용하지는 않음)이거나 바인딩된 표현식일 수 있습니다.
이 속성은 바인딩 대상을 선언적으로 지정할 수 없는 경우에만 사용하면 됩니다. 그렇지 않은 경우에는 대상에 직접 바인딩할 수 있습니다.
when : bool
이 속성은 바인딩이 활성화된 상태에서 적용됩니다. 바인딩을 활성화하고 싶을 때는 이 속성을 true로 평가되는 표현식으로 설정해야 합니다.
Binding {
contactName.text: name
when: list.ListView.isCurrentItem
}기본적으로 바인딩이 비활성화되면 이전에 설정된 모든 바인딩이나 값이 복원됩니다. restoreMode 속성을 사용하여 복원 동작을 사용자 지정할 수 있습니다.
restoreMode도 참조하십시오 .
© 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.