2016-10-06 4 views
0

Qt + QML에서 나는 Q_PROPERTY을 많이 사용하고 있습니다. NOTIFY 신호는 값을 재평가하기에 좋습니다.Q_PROPERTY를 한 번만 평가하는 방법

class SomeComponent: public QObject 
{ 
public: 
    const QString& GetMyValue(void) const; 
    void SetMyValue(const QString &value); 

    Q_PROPERTY(QString myValue READ GetMyValue WRITE SetMyValue NOTIFY myValueChanged) 

signals: 
    void valueChanged(); 
} 


Text { 
    text: myComponent.myValue 
} 

내가 이제는 값을 한 번만 가져오고 QML에서 업데이트하지 못하게하려는 시나리오가 있습니다.

예 : 사용자가 이전 값을 알 수있게하면서 변경할 수 있기를 원합니다.

TextInput { 
    text: myComponent.myValue 
    onAccepted:{ 
     myComponent.myValue = text 
    } 
} 
Text { 
    text: "OldValue: " + myComponent.myValue 
} 

이제 TextInput을 입력하고 Enter 키를 누르면 Text 요소의 텍스트도 업데이트됩니다. 이 문제를 어떻게 방지 할 수 있습니까?

속성에서 연결을 끊을 수 있습니까?

GetMyValueSetMyValueQ_INVOKABLE으로 변경하는 유일한 방법은 무엇입니까?

+0

QML에 이전 값이 표시되기를 원하지만 C++ 모델에 이전 값 또는 새 값을 저장 하시겠습니까? – user2436719

+0

항상 새로운 가치를 지니기 위해 C++ 모델을 갖고 싶습니다. QML에서만, 텍스트 요소가 생성되었을 때 텍스트에 myValue의 값을 갖도록 내 예제에서보고 싶은 값을 결정할 수 있기를 원합니다. 예를 들어 이것은 Q_INVOKABLE을 통해 이루어질 수 있습니다. 다른 방법이 있는지 알고 싶습니다. – RvdK

+0

"f 이제 TextInput을 입력하면 Text 요소의 텍스트도 업데이트됩니다."- 확실합니까? 왜냐하면 그렇게해서는 안됩니다. 코드에 한 방향 바인딩이 있습니다. myValue를 변경하면 TextInput의 텍스트가 변경되지만 TextInput을 변경하면 myValue가 변경되지 않습니다. – dtech

답변

0

는이를 제거해야합니다 myComponent.myValue을 읽는 것은 GetMyValue를 호출하여 ++ C의 값을 얻을 것이다 text: "OldValue: " + myComponent.myValue 때문이다.

는 QML에서는 함수

function updateDisplay(){ 
    iText.text = "OldValue: " + myComponent.myValue 
} 
Text { 
    id: iText 
    text: "OldValue: " 
} 

를 작성하고 당신은 당신이 값을 업데이트 할 때마다 ++ C에서 updateDisplay()를 호출합니다.

기본적으로 QML에서 C++ 값 (var aValue = myCPPComponent.myValue)을 읽으면 Q_PROPERTY에 지정된 getter를 호출하고 값 (myCPPComponent.myValue = aValue)을 설정하면 setter를 호출합니다. 항상.