QML与C++交互(在QML中调用C++函数,使用枚举作为参数传递)
QML与C++交互(在QML中使用枚举作为参数传递)
应用场景:
C++类已注册在QML的上下文属性中,且C++类不应该在QML中实例化,但是在QML需要使用C++类提供的枚举类型作为参数传递。
解决方法:
使用qmlRegisterUncreatableType来注册一个不可实例化的C++类型,并在QML中使用 import语句导入。使用方法如下:
qmlRegisterUncreatableType参数说明:
/*
模板参数:
T:要注册的C++类
metaObjectRevision:元对象版本号。暂时还没有弄明白这个参数是什么作用
模板函数参数:
uri:库名称
versionMajor:库的主版本号
versionMinor:库的次版本号
qmlName:模块的名称(在QML中使用qmlName通过"."运算符访问C++的方法)
reason:出错时的提示,例如在QML中实例化由qmlRegisterUncreatableType注册的C++类时,将报错并输出reason当中保存的信息
*/
qmlRegisterUncreatableType<typename T, int metaObjectRevision>(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& reason)
具体使用:
1、使用qmlRegisterUncreatableType注册的C++类必须继承QObject
2、使用Q_ENUM向元对象注册
3、使用qmlRegisterUncreatableType注册的C++类只能方为其附加属性和枚举类型
4、枚举类型的首字母必须大写才能被QML识别为数据类型
C++文件
//部分代码
enum MyRole{
Kooooo
...
};
Q_ENUM(MyRole)
qmlRegisterUncreatableType<LayoutModel,1>("LayoutModel",1,0,"LayoutEnum",QString());
QML代码
```c
import LayoutModel 1.0
//使用方式:qmlName.枚举名/附加属性
console.log("xmlModel::MyRole:",LayoutEnum.Kooooo);
以上是我在实际使用中遇到的问题,也在网上找了很久都没有找到满意的答案
本人才疏学浅,有什么说的不对的地方还请各位大佬指正!
版权声明:本文为qq_34472026原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。