我在这个圈子里跑来跑去。只是无法将我的头绕在信号和插槽上。
只是寻找一些可以在我的 C++ 中出现信号时自动更新我的 UI 的机制。
例子:
我在 Qml 中有两个带有文本的标签: _app.method 返回一个值。
我有一个 onClicked 运行 Q_INVOKABLE 方法的按钮。该方法在完成时会发出一个信号,例如,获取地理坐标并更新上述文本:分配所依赖的值。
我想要的是更新文本:一旦这些值发生变化,分配。
我只需要清楚地解释这些信号/插槽。文档中唯一的示例似乎只假设 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 方法将信号与 QML 函数连接起来;这意味着,现在我们正在监听值的变化,当它发生时,该函数将被调用。然后,我们更改值...由于 Q_PROPERTY 将写入值设置为名为 setValue 的函数,因此使用新值调用 setValue;在内部,m_iValue 发生了变化,并且发生了一个发射,它告诉正在收听 valueChanged 的人有一个新值。
嘿,我的 QML 正在听那个!(通过 _app.valueChanged.connect 脚本)。因此,正在监听的 QML 对象(按钮)调用了 onValueChanged 函数,并带有新值(因为发出 valueChanged(m_iValue)。
请告诉我我已经想通了??!?!