欢迎光临
我们一起努力

c++ Qt/QML qmlRegisterType与setContextProperty(差异)

在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()是最佳选择。

赞(0) 打赏
未经允许不得转载:Libero's Blog » c++ Qt/QML qmlRegisterType与setContextProperty(差异)

评论 抢沙发

评论前必须登录!