Qt/QML qmlRegisterType vs. setContextProperty (difference)

Qt/QML qmlRegisterType vs. setContextProperty (difference)

本文关键字:difference setContextProperty vs QML qmlRegisterType Qt      更新时间:2023-10-16

在Qt/QML应用程序中(此代码通常驻留在QtCreator项目的main.cpp中),下面几种将c++类暴露给QML的方法有什么区别:

qmlRegisterType<UePeopleModel>("com.example",
                               1,
                               0,
                               "UePeopleModel");

engine.rootContext()->setContextProperty("uePeopleModel",
                                         uePeopleModel);

?

qmlRegisterType :

"有时qobject派生类可能需要在QML类型系统中注册,但不是作为可实例化类型注册。"

如果您希望在一个或多个具有不同属性的qml文件中重用qobject派生类,请使用qmlRegisterType。QML负责这个寄存器类的初始化。

查看更多帮助。从c++定义QML类型

setContextProperty:

使用setContextProperty,当你想使用一个全局类来访问或从QML。这里你需要在使用setContextProperty()之前创建这个类对象。

注意:由于在QML中求值的所有表达式都是在特定的上下文中求值的,如果上下文被修改,该上下文中的所有绑定都将被重新求值。因此,在应用程序初始化之外应该小心使用上下文属性,因为这可能会导致应用程序性能下降。

查看更多帮助。在QML中嵌入c++对象

在第一个中,您声明了可用于在QML中实例化的c++类型,在第二个中,您声明了相同类型的全局变量"uePeopleModel"