BB10 Cascades: 如何在QML中访问C++中的数据。

在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对象,赋予propertyMap变量。

然后通过调用propertyMap的insert方法插入了两个数据,值分别是“value1”和"value2",它们的关键字分别是“mykey1”和“mykey2”。

创建了QDeclarativePropertyMap对象后,就可以通过QmlDocument对象的setContentProperty方法将QDeclarativePropertyMap对象暴露给指定的QML文档对象,如以下代码:

QmlDocument *qml = QmlDocument::create("asset:///main.qml");  
   
qml->setContextProperty("myProperty", propertyMap); 

以上代码创建了一个QmlDocument对象,对应的QML文档是mail.qml。

然后通过setContentProperty方法将上面创建的propertyMap对象暴露给mail.qml。

这样在mail.qml中就可以访问propertyMap对象中的数据了,如以下代码:

Label {    
text: "value of mykey1: " + myProperty.mykey1 
}
 
Label {  
text: "value of mykey2: " + myProperty.mykey2
 } 


以上代码运行时,mail.qml加载后会在两个标签字段显示C++中设置的“mykey1”和“mykey2”对应的两个数据,分别是"value1"和“value2”。

大家可以通过简单修改Hello World样例来测试以上代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值