在Qt / QML应用程序中(此代码通常驻留在QtCreator项目的main.cpp
中),以下将C ++类暴露给QML的方法之间的区别是什么:
qmlRegisterType<UePeopleModel>("com.example",
1,
0,
"UePeopleModel");
和
engine.rootContext()->setContextProperty("uePeopleModel",
uePeopleModel);
答案 0 :(得分:9)
qmlRegisterType :
&#34;有时,QObject派生类可能需要在QML类型系统中注册,但不能作为可实例化类型注册。&#34;
如果要在一个或多个具有不同属性的qml文件中重用QObject派生类,请使用qmlRegisterType。 QML负责初始化该寄存器类。
有关更多帮助,请参阅此处。 Defining QML Types from C++
setContextProperty :
使用setContextProperty,当您想使用单个全局类访问QML或从QML访问时。这里您需要在使用setContextProperty()之前创建此类对象。
注意:由于在QML中评估的所有表达式都是在特定上下文中计算的,因此如果修改了上下文,则将重新评估该上下文中的所有绑定。因此,应在应用程序初始化之外小心使用上下文属性,因为这可能会导致应用程序性能下降。
有关更多帮助,请参阅此处。 Embedding C++ Objects into QML
答案 1 :(得分:2)
在第一个中,您声明可以在QML中实例化的C ++类型,在第二个中,您声明了相同类型的全局变量“uePeopleModel”。