한국어
Qt
 

엑세스할 수 없는 속성에 바인딩

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 82693
153 성능 고려 및 제안 사항 makersweb 2022.03.07 434
» Binding 타입으로 객체 속성 간 묶기 makersweb 2022.03.04 337
151 Qt Bluetooth Low Energy 개요 makersweb 2022.02.13 560
150 Qt Android 앱에 AdMob 배너달기 file makersweb 2021.12.04 355
149 Qt 6의 C++ 프로퍼티 바인딩 예제 makersweb 2021.11.01 767
148 QML에서 앵커(anchors)로 위치 지정 file makersweb 2021.10.05 2961
147 안드로이드용 Qt 6.2 makersweb 2021.10.02 445
146 Qt 응용프로그램에서 PDF 문서 렌더링 file makersweb 2021.09.23 549
145 QML에서 Websocket 서버와 통신 file makersweb 2021.09.18 709
144 QML 코딩 규칙 makersweb 2021.09.05 2685
143 QML 에서 QR코드 생성 file makersweb 2021.08.20 803
142 앱을 종료할 때 QML 바인딩 오류를 피하는 방법 makersweb 2021.08.08 446
141 Qt 응용프로그램에서 Lottie Animation사용 file makersweb 2021.05.30 779
140 싱글 샷(Single-Shot) 시그널/슬롯 연결 makersweb 2021.05.12 639
139 응용프로그램 자동실행 설정 (on Windows) makersweb 2021.05.08 492
138 Qt 6 에서 프로퍼티 바인딩 makersweb 2021.04.03 714
137 QML과 JavaScript 의 숫자 관련 내장된 함수 makersweb 2021.03.28 1112
136 Qt 5 코드를 Qt 6로 포팅하기 위해 도움이 되는 Clazy Framework file makersweb 2021.03.01 830
135 C++로 작성한 클래스를 QML에서 생성 file makersweb 2021.02.10 4855
134 Qt MQTT의 pus/sub 튜토리얼 file makersweb 2021.02.06 1399