2013-02-17 6 views
6

나는 이것에 대해 주위를 돌고 있습니다. 신호와 슬롯 주변에서 머리를 감쌀 수 없습니다.캐스케이드 및 신호/슬롯

내 C++의 신호가 발생할 때 자동으로 UI를 업데이트 할 수있는 메커니즘을 찾고 있습니다.

예 :

나는 두 개의 텍스트가 QML에서 라벨이 : 값을 반환 _app.method을.

나는 onClicked가 Q_INVOKABLE 메소드를 실행하는 버튼이 있습니다. 이 메소드는 완료되면 신호를 내 보냅니다. 예를 들어, geocordinates를 가져오고 위 텍스트 : 할당이 의존하는 값을 업데이트합니다.

내가 원하는 것은 그 값이 변경되면 텍스트 : 할당을 업데이트하는 것입니다.

이 신호/슬롯을 분명하게 설명하면됩니다. 문서의 유일한 예는 QML 또는 C++만으로 간주되지만 둘 다 혼합하지는 않습니다. 샘플 코드에는 예제가 있지만 설명서에는 구체적으로 설명되어 있지 않습니다.

평이한 설명이있는 경우 적응할 수 있는지 확인하십시오. 예를 들어, 1 : QML에서 이것을 정의합니다. 2 : hpp 파일에서 이것을 정의합니다. 3 : cpp 파일에서 이것을 정의합니다.

QObject의 setPropery ("text", "value")를 사용해 보았지만 시도 할 때 내 응용 프로그램이 충돌합니다.

내가 틀렸다면 말해 ...

1) QML에서 :

Button { 
    id: aButton 
    text: _app.value 
    onClicked: { 
     _app.valueChanged.connect(aButton.onValueChanged); 
     _app.value = _app.value + 1; 
    } 
    function onValueChanged (val) { 
     aButton.text = "New value: " + val; 
    } 
} 

2) HPP의 :

Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged) 
public: 
    int value(); 
    void setValue(int i); 
signals: 
    void valueChanged(int); 
private: 
    int m_iValue; 

3) CPP의 :

int class::value() 
{ 
    return m_iValue; 
} 

void class::setValue(int i) 
{ 
// name is same as HPP WRITE Q_PROPERTY statement 
    m_iValue = i; 
    emit valueChanged(m_iValue); 
} 

QML에서 onClick 메서드 인 CONNECT QML 기능을 가진 신호; 즉, 이제 우리는 가치 변화를 듣고 있으며, 그렇게되면 그 기능이 호출됩니다. 그런 다음 값을 변경합니다 ... Q_PROPERTY가 쓰기 값을 setValue라는 함수로 설정했기 때문에 setValue가 새 값으로 호출됩니다. 내부적으로 m_iValue가 변경되고 emit이 발생하면 valueChanged를 청취중인 사람에게 새로운 값이 있음을 알려줍니다.

안녕하세요, 제 QML이 듣고 있습니다! (_app.valueChanged.connect 스크립트를 통해). 그래서 QML 객체 (Button)는 그것을 듣고 있었고, valueChanged (m_iValue)를 방출했기 때문에 새로운 값으로 onValueChanged 함수가 호출되었습니다.

제게 말해 주셨습니까? !?!

답변

10

Q_PROPERTY 매크로를 사용하는 경우 onValueChanged 신호를 명시 적으로 버튼 텍스트를 변경하는 함수로 바인딩 할 필요가 없습니다. 또한 m_iValue로 valueChanged 신호를 내 보내지 않아도됩니다.해당 파일에 후술 변경할

QML :

Button { 
    horizontalAlignment: HorizontalAlignment.Center 
    verticalAlignment: VerticalAlignment.Center 
    id: aButton 
    text: _app.value 
    onClicked: { 
     _app.value = _app.value + 1 
    } 
} 

HPP :

signals: 
    void valueChanged(); 

CPP :

가의 valueChanged을 방출();

+0

와우 ... 시그널/슬롯 매그 니 덕분에 어떻게 든 작동합니다. 이 특수 효과를 만드는 특수 키워드가 있습니까? –

+0

아는 바가 없습니다. –