在 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/