我在圈子里跑来跑去。只是无法将我的头围绕信号和插槽。级联和信号/插槽
只是寻找一些机制,可以自动更新我的用户界面时,我的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