在QML中注册C++类型
在Qt6以后不在推荐使用qmlRegisterType注册C++类,但是如果在Cmake项目中不使用qt_add_qml_module,这种方法还可以使用。
在Qt6以后的版本,注册C++类型到QML中需要一下几种方式
1.基于 QML_ELEMENT
在继承自QObject的类中,需要生命Q_OBJECT,在该宏下面可以直接声明 QML_ELEMENT 宏,将该C++类注册到QML中;
需要注册到QML中的C++类,头文件需要有
#include “QtQml/qqmlregistration.h”
2. 基于 QML_NAMED_ELEMENT(name) 宏,给该C++类自定义类名注册到QML中,使用方法和QML_ELEMENT一样。
注:在QMake、CMake工程中对于导入C++到QML的配置不同。
3.注册对象类型到QML中
3.1 QML_ANONYMOUS宏:注册不可实例化,且无法从QML引用的
C++类型,即无法在QML中创建、使用该C++类型声明属性。3.2QML_INTERFACE宏:注册Qt接口类型,该类型不能从QML实例化。
3.3QML_UNCREATABLE宏:注册一个命名的C++类,该类型不可实例化,但可以被QML系统识别。
该宏必须和QML_ELEMENT或者 QML_NAMED_ELEMENT结合使用
3.4QML_SINGLETON 注册单例类型,
该宏必须和QML_ELEMENT或者 QML_NAMED_ELEMENT结合使用
注册单例类型
单例允许QML使用 namespace::属性或者 namespace::信号
或者namespace::函数 ,访问C++类的属性或者信号、函数