我在圈子裏跑來跑去。只是無法將我的頭圍繞信號和插槽。級聯和信號/插槽
只是尋找一些機制,可以自動更新我的用戶界面時,我的C + +信號發生。
例子:
我在設爲Qml兩個標籤有文字:_app.method返回一個值。
我有一個按鈕,onClicked運行Q_INVOKABLE方法。該方法完成後會發出一個信號,例如,獲取地理座標並更新上述文本:賦值依賴的值。
我想要的是更新文本:分配一旦這些值改變。
我只需要這些信號/槽說明明白。文檔中的唯一示例似乎只假定QML或C++,但不是兩者的組合。示例代碼有示例,但在文檔中沒有特別說明。
如果你有明確的描述,我確定我可以適應它。例如,1:在QML中定義這個,2:在hpp文件中定義這個,3:在cpp文件中定義這些。
我試過使用QObject的setPropery(「文本」,「值」),但我的應用程序崩潰時嘗試這一點。
告訴我,如果我錯了...
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 S帶有QML函數的信號;這意味着,現在我們正在偵聽一個值的變化,當它發生時,這個函數將被調用。那麼,我們改變這個值...因爲Q_PROPERTY將寫入值設置爲一個名爲setValue的函數,setValue被調用了新的值;在內部,m_iValue被改變,並且發生發射,這告訴正在監聽valueChanged的人有新值。
嘿,我的QML正在聽! (通過_app.valueChanged.connect腳本)。因此,正在監聽的QML對象(Button),它的onValueChanged函數被調用,並帶有新的值(因爲發出了valueChanged(m_iValue)。)
請告訴我,我已經想通了? !
哇...它以某種方式工作,這要歸功於SIGNAL/SLOT魔法。 是否有任何特殊的關鍵字在使這項工作? – 2013-02-18 15:18:13
沒有任何我知道的 – 2013-02-18 18:23:03