Qt / QML qmlRegisterType与setContextProperty(差异)

时间:2015-08-17 06:47:56

标签: c++ qt qml

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

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

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

2 个答案:

答案 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”。