Qt/QML qmlRegisterType与setContextProperty(差异)

Ker*_*nic 10 c++ qt qml

在Qt/QML应用程序中(此代码通常驻留在main.cppQtCreator项目中),以下将C++类暴露给QML的方法有何不同:

qmlRegisterType<UePeopleModel>("com.example",
                               1,
                               0,
                               "UePeopleModel");
Run Code Online (Sandbox Code Playgroud)

engine.rootContext()->setContextProperty("uePeopleModel",
                                         uePeopleModel);
Run Code Online (Sandbox Code Playgroud)

Ank*_*kur 12

qmlRegisterType:

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

如果要在一个或多个具有不同属性的qml文件中重用QObject派生类,请使用qmlRegisterType.QML负责初始化该寄存器类.

有关更多帮助,请参阅此 从C++定义QML类型

setContextProperty:

使用setContextProperty,如果要使用单个全局类来访问QML或从QML访问.这里您需要在使用setContextProperty()之前创建此类对象.

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

有关更多帮助,请参阅此 将C++对象嵌入到QML中