qml与c++交互通信(二)qml端发送信号并绑定c++端槽函数

qml与c++的信号绑定通常是在qml界面端设置一个信号,而需要绑定c++界面的槽函数。在或者是c++设置的信号,需要绑定qml界面端的槽函数。这篇博客主要介绍qml与c++之间的信号绑定方法。

1、qml端设置发送信号绑定c++端的槽函数

首先,需要在qml端设置一个信号,并出发这个信号。

在qml端设置信号后,需要在c++端设置槽函数。设置如下:

并在函数上点击Alt+Enter键添加在源文件中的定义。在源文件中,添加该槽函数的具体实现,如下:

这时,已经添加了qml端的信号和c++端的槽函数。那么现在就需要将这两个信号和槽函数连接起来即可。而连接信号和槽函数的方法有两种,这里分别介绍:

1.1、使用Connections方法连接信号和槽

在qml端添加Connections来连接。如下:

target表示的是发送信号者,这个qmlsig是设置在窗体中的信号,因此触发信号的是该窗体。

下面的function则是设置处理信号的槽函数方法。on+首字母大写(对应的信号)表示的是这个信号处理对应的槽函数方法,并传入对应参数。在函数体中,我们间接调用了在qml端创建对象的槽函数方法。

对应的测试输出正常。

总结,这种方法可以实现信号与槽函数的绑定,但从Connections函数中,感觉并不是像传统的信号槽连接方法,更像是直接调用该对象的函数。

1.2使用信号名+.connect+(槽函数名)

第二种方法是直接使用信号名加connect来直接绑定槽函数,具体方法代码如下:

我们在控件完成加载后,使用该方法绑定信号和槽函数,可以同样实现功能。

上述的两种方法都是在qml端代码中绑定了c++端的槽函数。同样可以在c++端来绑定qml端的信号和c++端和槽函数。具体是在engine.load(url);中engine加载完成以后,使用engine.rootObjects,这个可以得到我们的加载的qml文件里面的所有object对象,并通过对象来获得信号并与槽函数绑定,该方法较为繁琐,就不做介绍了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QMLC++交互的方法主要有以下几种: 1. 使用QObject::connect()函数连接QMLC++对象的信号函数,实现数据的传递和交互。 2. 使用Q_INVOKABLE宏将C++函数声明为可在QML中调用的函数。这样,QML可以直接调用C++函数,实现数据的交互。 3. 使用Q_PROPERTY宏将C++对象的属性声明为可在QML中访问的属性。这样,QML可以直接访问C++对象的属性,实现数据的交互。 4. 使用QQmlContext类将C++对象注册到QML中,并在QML中访问这些对象。这样,QML可以直接访问C++对象,实现数据的交互。 下面是一个具体的例子,展示了如何在QML中访问C++对象的属性和函数C++代码: ``` // MyObject.h #include <QObject> class MyObject : public QObject { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged) public: explicit MyObject(QObject *parent = nullptr); int value() const; void setValue(int value); signals: void valueChanged(); private: int m_value; }; // MyObject.cpp #include "MyObject.h" MyObject::MyObject(QObject *parent) : QObject(parent) { m_value = 0; } int MyObject::value() const { return m_value; } void MyObject::setValue(int value) { if (m_value != value) { m_value = value; emit valueChanged(); } } ``` QML代码: ``` import QtQuick 2.0 Item { width: 200 height: 200 Text { text: "Value: " + myObject.value } Slider { anchors.top: text.bottom from: 0 to: 100 value: myObject.value onValueChanged: myObject.value = value } Connections { target: myObject onValueChanged: text.text = "Value: " + value } Component.onCompleted: { console.log("Value:", myObject.value) } } ``` 在这个例子中,我们创建了一个名为MyObject的C++对象,并将其注册到QML中。MyObject类有一个名为value的属性和一个名为setValue的函数,用于设置属性值。在QML中,我们创建一个Slider和一个Text组件,用于显示和修改MyObject的value属性。我们还使用Connections组件将MyObject的valueChanged信号与Text的text属性绑定,以使其能够自动更新。最后,在Component.onCompleted信号处理程序中,我们打印MyObject的value属性的值,以验证其已成功从C++对象传递到QML界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值