在BB10 Cascades开发中,界面元素一般都是通过QML建构,虽然在QML中可以使用JavaScript完成一些计算,不过这不足以支持一个复杂的应用。在很多情况下,我们需要在QML中访问C++中的数据和方法。特别是当我们使用MVC模式的时候,使用C++建构Model和Controller,而使用QML建构View时,就更需要从QML中访问C++中的数据和方法。
首先我们来看看如何在QML中访问直接访问C++中的数据,有关QML中访问C++对象的方法和数据的方法我们在以后的文章中讨论。
如果需要在QML中访问C++中的数据,首先我们需要将数据暴露给QML。把C++数据暴露给QML的一个简单方法是使用QDeclarativePropertyMap类。
QDeclarativePropertyMap类是一个Map容器类,在C++中可以通过insert方法将数据插入到该容器中,插入的形式是一个常见的“关键字-值”的形式。
有关QDeclarativePropertyMap对象的定义和数据的插入请参考下面的C++代码:
QDeclarativePropertyMap* propertyMap = new QDeclarativePropertyMap;
propertyMap->insert("mykey1", QVariant(QString("value1")));
propertyMap->insert("mykey2", QVariant(QString("value2")));
以上代码创建了一个QDeclarativePropertyMap对象