在 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 负责初始化这个寄存器类。

请参阅此以获取更多帮助。
Defining QML Types from C++

setContextProperty :

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

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

请参阅此以获取更多帮助。
Embedding C++ Objects into QML

关于c++ - Qt/QML qmlRegisterType 与 setContextProperty(区别),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32044270/

10-17 01:45