级联和信号/槽
cascades and signals / slots
我正在为此兜圈子。我就是无法理解信号和插槽。
只是在寻找一些机制,当我的C++中出现信号时,可以自动更新我的UI。
示例:
我在Qml中有两个标签,它们有文本:_app.method,返回一个值。
我有一个按钮,它在Clicked上运行一个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函数,并使用新值(因为emit valueChanged(m_iValue))。
请告诉我我已经想通了??!?!
如果使用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:
emit valueChanged();
- 只有级联分类器会发出未定义的引用错误
- 裁剪并显示我从哈尔级联获得的图像
- 每次b/c程序无法加载级联时,使用harr级联的人脸识别都会失败
- C++ 为什么要级联共享对象链接
- 使用打开级联读取步骤文件
- 如何使用所有其他文件信息来编译代码,例如HAAR级联训练的权重的XML文件
- 为什么 haar 级联非常慢 opencv c++.
- 级联功能调用
- 通过级联呼叫来递增值
- 复制构造函数和级联功能调用
- 如何实现分类比较器,以级联相关对象
- CUDA:所有矢量元素的级联求和
- 用于人脸检测的Haar级联xml文件代码解释OpenCV
- 恒定时间级联计算是否可行
- 级联文件的iOS opencv filepath
- OpenCV对象在训练级联后检测算法会冻结
- 返回引用和使用级联函数
- 从C++代码发出 BB 级联按钮的"clicked()"信号
- 级联导航窗格:连接到另一个qml文件的对象信号
- 级联和信号/槽