在Qt界面开发时,用信号槽可以很容易实现各个窗口控件之间的交互,qml也是可以的,qml和C++可以相互调用,可以在qml代码中调用C++的类对象,也可以用C++类来获取qml的控件对象,下面分别介绍这两这种用法,需要源码的可以翻到最后直接下载。
一、qml调用C++
Qt 提供了两种在 QML 环境中使用 C++对象的方式∶
方式1:在C+中实现一个类,注册为 QML 环境的一个类型,在 QML 环境中使用该类型创建对象。
方式2:在 C++中构造一个对象,将这个对象设置为 QML 的上下文属性,在QML 环境中直接使用该属性。
不管哪种方式,对要导出的 C++类都有要求,不是一个类的所有方法、变量都可以在 QML 语境中使用,定义可以导出的 C++类 前提条件 要想将一个类或对象导出到 QML 中,下列的前提条件必须满足∶
(1)从 QObject 或 QObject 的派生类继承,并使用Q_OBJECT宏,这和使用信号与槽的前提条件一样的,这两个条件是为了让一个类能够进入Qt强大的元对象系统(meta-object system)中,只有使用元对象系统,一个类的某些方法或属性才可能通过字符串形式的名字来调用,才可以在 QML 中被访问。
(2)成员函数想在qml中被调用,则需要在声明前加上Q_INVOKABLE
(3)槽函数可以用类对象在qml代码中直接调用
(4)C++的成员属性可以用Q_PROPERTY宏设置
(5)枚举体需要用Q_ENUMS导出
下面介绍方式1, 例如下面这个类