在Qt / QML应用程序(此代码通常位于main.cppQtCreator项目中)中,以下几种将C ++类暴露给QML的方式之间有什么区别:
qmlRegisterType<UePeopleModel>("com.example", 1, 0, "UePeopleModel");
和
engine.rootContext()->setContextProperty("uePeopleModel",uePeopleModel);
qmlRegisterType:
“有时可能需要将QObject派生的类注册到QML类型系统,而不是可实例化类型。”
如果要在一个或多个具有不同属性的qml文件中重复使用QObject派生的类,请使用qmlRegisterType。QML负责初始化此寄存器类。
setContextProperty:
当您要使用单个全局类访问QML或从QML访问时,请使用setContextProperty。在这里,您需要在使用setContextProperty()之前创建此类对象。
注意:由于在QML中求值的所有表达式都是在特定上下文中求值的,因此,如果修改了上下文,该上下文中的所有绑定都将重新求值。因此,应在应用程序初始化之外小心使用上下文属性,因为这可能会导致应用程序性能下降。
应用
所以我有Qt / QML,一开始这个应用需要用户登录。我正在考虑创建一些全局状态类,该类将(在开始时)包含登录用户的ID和名称(从数据库中获取),因此对于此特定示例,我将对象嵌入到qml中,而不是定义新的qml类型?是的,setContextProperty()是最佳选择。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧