【QML qmlRegisterType】qmlRegisterType 的功能以及用法
1、qmlRegisterType
qmlRegisterType 是 Qt 提供的一个函数,用于将 C++ 类注册到 QML 环境中,使得这些类可以在 QML 文件中使用;< >内为要注册的 C++ 类的类型
qmlRegisterType里总共4个参数:第一个参数指的是QML中import后的内容,相当于头文件名;第二个第三个参数分别是主次版本号;第四个指的是QML中类的名字。
注意:第四个QML的类名首字母一定要大写,要不然会报错。。而且是那种你找不到的。。
实例
qmlRegisterType<MySliderItem>("com.mycompany.qmlcomponents", 1, 0, "Slider");
qml文件中
import com.mycompany.qmlcomponents 1.0
Slider {
}
2、qmlRegisterUncreatableType
qmlRegisterUncreatableType 用于注册不能直接在 QML 中实例化的 C++ 类,通常是因为这些类需要特定的构造函数或初始化过程。
int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason);
实例
qmlRegisterUncreatableType<Vehicle> (kQGCVehicle, 1, 0, "Vehicle", kRefOnly);
第一个参数是要注册的 C++ 类的类型,如 Vehicle ; 第二个参数是导入模块的名称,kQGCVehicle 应该是一个预定义的字符串常量
第三和第四个参数是版本号 第五个参数是 QML 中使用的类名
最后一个参数 kRefOnly 表示只能通过引用访问该类的实例
有时候QObject派生类可能需要在QML类型系统中注册,但不能作为可实例化类型。例如,如果C ++类是这种情况:
1.是一个不应该实例化的接口类型
2.是不需要暴露给QML的基类类型
3.声明了一些应该可以从QML访问的枚举,但除此之外不应该是可实例化的
4.通过单例实例提供给QML的类型,不应该从QML实例化
在Qt的QML模块提供用于登记非实例类型的几种方法:
qmlRegisterType()(不带参数)注册一个C ++类型,该类型不可实例化,不能从QML引用。这使得引擎可以强制从QML实例化的任何继承类型。
qmlRegisterInterface()注册具有特定QML类型名称的Qt接口类型。该类型不是从QML实例化的,但可以通过其类型名称引用。
qmlRegisterUncreatableType()注册一个不可实例化的命名C ++类型,但可以识别为QML类型系统的一个类型。如果类型的枚举或附加属性可以从QML访问,但是类型本身不应该是可实例化的,那么这个方法可以用到。
qmlRegisterSingletonType()注册一个可以从QML导入的单例类型。
注意,使用QML类型系统注册的所有C ++类型都必须是QObject派生的,即使是不可实例化类。
3、qmlRegisterSingletonType
qmlRegisterSingletonType
是 Qt 提供的一个函数,用于将 C++ 类注册为 QML 单例类型。单例类型意味着在整个应用程序生命周期中,该类型只会有一个实例存在,并且可以在 QML 代码中全局访问
qmlRegisterSingletonType
有两种重载形式:
形式一:
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, T *(*factory)(QQmlEngine *, QJSEngine *));
形式二:
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, QObject *(*factory)(QQmlEngine *, QJSEngine *));
使用场景
实例
qmlRegisterSingletonType<QGroundControlQmlGlobal> ("QGroundControl", 1, 0, "QGroundControl", qgroundcontrolQmlGlobalSingletonFactory);
第一个参数是单例类的类型,如 QGroundControlQmlGlobal 第二个参数是导入模块的名称,如 "QGroundControl"
第三和第四个参数是版本号 第五个参数是 QML 中使用的单例对象名称,如 "QGroundControl"。
最后一个参数是一个工厂函数,用于创建单例对象的实例,如 qgroundcontrolQmlGlobalSingletonFactory。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律