2012-08-10 1 views
3

원인을 모르거나 수정하는 방법을 모르기 때문에 수정해야 할 시간이 오래 걸리는 큰 문제에 직면하고 있습니다. 문제는 실제로 간단 I는 QML 성분으로 정의 일례 가지고QML 양방향 C++ 바인딩은 더 이상 변경 사항을 수신하지 않습니다.

Rectangle { 
    id: rect 
    property bool test: myclass.testproperty 

    Rectangle { 
     width: 50 
     height: 50 
     visible: parent.test 
    } 
} 

및 I는 MouseArea 이렇게하는 신호 onClicked 접속 :

test = !test 

이렇게 I는 불리언 변수의 값을 스위치. 쓰기 신호를 통지 QML과 QML에서 READ와 C++ Q_PROPERTY에 ++ C의 값을 밀어하기 위해, 나는 내가 mouseArea 클릭하고 그래서 바인딩을 통해 변경 사항을 밀어 때까지이

Binding { 
    target: myclass 
    property: "testproperty" 
    value: rect.test 
} 

모든 것이 잘 작동 사용 . 그 후, C++에서 새 속성 값을 설정하려고 할 때마다 바인딩이 삭제 된 것처럼 QML에 변경 사항이 표시되지 않습니다. 그러나 MouseArea를 클릭하려고해도 C++ 클래스의 setTestProperty 메서드를 호출합니다. 기본적으로 C++ -> QML 방식과 동기화되지 않습니다. 왜? 기본적으로 여기에 우리가 QString을 사용하고 있습니다 : QSignalSpy 여기에 예를

emit this->testPropertyChanged(newvalue) 

편집

사용 후 방출 시간의 계산으로 나에게 일을 제공하기 때문에 나는 신호가 방출되는 문제를 찾을 수 없습니다 속성과 똑같은 신호. 변경 유일한 대신 사각형 QML 요소를 사용하고 자신의 속성에 바인딩의, 나는 TextInput 구성 요소

TextInput { 
    id: mytext 
    text: myclass.testproperty 
} 

Binding { 
    target: myclass 
    property: "testproperty" 
    value: mytext.text 
} 

답변

6

여기에 아무 문제가 없습니다를 사용하고 있다는 점이다. 이는 표준 QML 바인딩 동작입니다. 자바 스크립트 코드에서 일부 QML 위젯의 속성을 변경하면 모든 선언적 바인딩이 종료됩니다. 이벤트 핸들러의 JS 코드에서 선언적 바인딩 또는 업데이트 값을 수동으로 사용하는 것이 좋습니다.

편집

Rectangle { 
    id: rect 

    // Establishing initial value for 'test' property via QML binding 
    property bool test: myclass.testproperty 

    // Manual update of 'test' property when binding will be broken 
    Connections { 
     target: myclass 
     onTestpropertyChanged: { 
      rect.test = xxx 
     } 
    } 
} 
+0

나는 그것이 작동 같은 일을하지만, 텍스트 구성 요소 및 관련 텍스트 속성을 사용합니다. 왜? – Stefano

+0

텍스트 객체로 양방향 바인딩이 작동하는 이유를 모르겠습니다. 예를 들어 줄 수 있습니까? –

+0

정말 작은 예제가 추가되었습니다 – Stefano

관련 문제