엑세스할 수 없는 속성에 바인딩
C++에서 QML로 노출하거나 내보낸 객체의 속성과 같이 QML에서 직접 인스턴스화하지 않은 다른 개체의 속성에 바인딩해야 하는 경우가 있다. Binding
타입을 사용하여 객체들의 속성간 동적 바인딩을 생성할 수 있다. 예를 들어 myobject1.x
속성을 Binding
을 사용하여 업데이트할 수 있다. 즉, 텍스트가 변경되면 C++ 속성 x
가 자동으로 업데이트된다.
C++
...
class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(QString x READ x WRITE setX)
...
}
...
MyObject myobject1;
engine.rootContext()->setContextProperty("myobject1", &myobject1);
...
QML
...
TextEdit {
id: myTextField
text: "Please type here..."
}
Binding {
target: myobject1
property: "x"
value: myTextField.text
}
...
조건부 바인딩
특정 조건이 충족됐을 때만 속성 값을 수정하도록 설정할 수 있다.
관련 있는 모든 분기에 대해 값을 제공해야 하므로 직접 바인딩으로는 이 작업을 수행할 수 없는 경우가 많다.
예를 들어 아래 예제 코드는 마우스를 놓을 때마다 경고를 표시한다. 마우스를 누르지 않았을 때 바인딩 값이 정의되지 않았기 때문이다.
...
// produces warning: "Unable to assign [undefined] to double value"
property int value: if (mouse.pressed) mouse.mouseX
Rectangle {
...
MouseArea {
id: mouse
anchors.fill: parent
}
}
...
다음과 같은 코드를 사용하면 당장 경고를 회피할 수 는 있다. 이것은 바인딩이 끊어진 채로 유지되므로 바람직하지 않다.
...
property int value
...
MouseArea {
id: mouse
anchors.fill: parent
onPressed: {
value = mouseX
}
}
...
Binding
을 사용하는 것이 바람직하다. restoreMode
속성은 바인딩이 비활성화 되었을 때 원래 값을 복원해야 하는지 여부와 복원 방법을 설명하는 데 사용할 수 있다. 기본 값(default value)은 Binding.RestoreBinding
로 설정된다.
...
property int value
Rectangle {
...
MouseArea {
id: mouse
anchors.fill: parent
}
}
Binding on value {
when: mouse.pressed
value: mouse.mouseX
restoreMode: Binding.RestoreNone
}
...
https://doc.qt.io/qt-5/qml-qtqml-binding.html
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 | 운영자 | 2019.01.05 | 86882 |
8 |
ShaderEffect QML Type 을 이용한 그래픽효과
![]() | makersweb | 2018.12.09 | 2200 |
7 |
Qml에서 커튼효과 구현 예제 - Shader Effects
![]() | 운영자 | 2018.12.05 | 1175 |
6 |
QML에서 동적으로 텍스트 다국어 처리
![]() | makersweb | 2018.11.04 | 4298 |
5 |
Qml에서 키보드 입력 이벤트 핸들링
![]() | makersweb | 2018.08.09 | 3700 |
4 | Qml 및 C++개발시 유용한 팁 [3] | makersweb | 2018.04.06 | 6119 |
3 | QML에서 undefined를 확인하는 방법 | makersweb | 2017.11.29 | 1546 |
2 |
Qml 사용자 ScrollBar 구현
![]() | makersweb | 2015.07.24 | 6275 |
1 | z-order 를 컨트롤 하기위한 방법 | makersweb | 2015.05.13 | 6657 |