Binding QML Type
속성 바인딩을 임의로 생성할 수 있습니다. 자세히...
| Import Statement: | import QtQml |
속성
- delayed : bool
- property : string
- restoreMode : enumeration
- target : QtObject
- value : var
- when : bool
자세한 설명
QML에서 속성 바인딩은 서로 다른 객체의 속성 간에 종속성을 초래합니다.
접근 불가능한 프로퍼티에 바인딩하기
C++에서 QML로 내보낸 클래스의 속성처럼 QML에서 직접 인스턴스화되지 않은 다른 객체의 속성에 객체의 속성을 바인딩해야 하는 경우가 있습니다. 바인딩 유형을 사용하여 이러한 종속성을 설정할 수 있으며, 어떤 값을 어떤 객체의 프로퍼티에 바인딩할 수 있습니다.
예를 들어, "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.mouseX
바인딩 유형을 사용하면 이 경고를 방지할 수 있습니다.
Binding on targetProperty {
when: mouse.pressed
value: mouse.mouseX
}바인딩 유형은 프로퍼티에 이전에 설정된 모든 직접 바인딩을 복원합니다.
그러나 when 이 false 인 경우에도 Binding 의 value 속성에 대한 바인딩은 여전히 무조건 평가됩니다.
예를 들어 바인딩을 사용하여 값이 null 인 것을 방지하는 경우 경고가 발생할 수 있습니다:
Binding on targetProperty {
when: root.object !== null
// produces warning: "TypeError: Cannot read property 'someProperty' of null"
value: root.object.someProperty
}이 문제를 피하는 방법이 있습니다:
- 대상에
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 } }
하나의 바인딩에 여러 타깃
하나의 바인딩 요소에서 동일한 개체에 대해 여러 바인딩을 지정할 수 있습니다:
Text {
id: t1
}
Binding {
t1 {
color: "#00FF00"
text: "green text"
}
}하나의 바인딩 요소에 서로 다른 대상 개체를 가진 여러 바인딩을 지정할 수도 있습니다:
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 }
참고: 지연된 속성을 사용하면 바인딩 요소가 값에 대한 프록시를 생성해야 하므로 실제 대상에 대한 적용을 지연시킬 수 있으므로 런타임 비용이 발생합니다. target 및 property 속성을 사용하는 경우 value 속성을 프록시로 재사용할 수 있으므로 이 비용이 더 낮습니다. 위에 표시된 양식을 사용할 때 바인딩은 프록시 값을 보유하기 위해 동적 메타 객체가 있는 별도의 객체를 할당합니다.
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.