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对象,并通过对象来获得信号并与槽函数绑定,该方法较为繁琐,就不做介绍了。
版权归原作者 可颂笪 所有, 如有侵权,请联系我们删除。