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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>