社区新版论坛已上线,点击立即前往!使用 openKylin 账户授权登录,解锁更多体验!

openKylin论坛

 找回密码

在Q-quick中添加C++的数据动态添加 [复制链接]

1.这个动态数据是从文件系统中的txt文件中先解析出来,在系统运行时,保存在应用程序中的容器里面;这个容器在装载的时候,把数据动态的跟QML中的代码关联起来;方便与用户的界面互动,用户使用界面控制命令的时候,能响应这些数据处理函数,并在处理函数完成响应的数据传输功能。

模拟测试:将动态载入的数据,用C++数据表示;

要修改的地方是:QML中的model-view,怎么用C++控制model的数据

实验:以music 中list导入到C++,用Q_PROPERTY的方法导入到QML中。

说明:
数据在dummydata中定义了modellist,并用title等标识了。在主页面中用index选择了那个list,并在changeTrack函数中调用检查list的数据,跟图像,用于在显示中使用;其中是用“全局变量”用途的property 自定义属性,用于传递数据;

怎么动态改变model中的listElement元素的数量?
答案:此外,我们还可以使用 Javascript 对 Model 进行 append(), insert(), move(), remove() 等动态操作,从而实现对 Model 数据的增加删除和修改。
源文档 <http://www.developer.nokia.com/Community/Wiki/QML%E4%B8%AD%E7%9A%84Model_View%E2%80%94%E2%80%94%E4%B8%80%E4%B8%AAListView%E5%AE%9E%E4%BE%8B>

当模型中数据改变时,即QStringList改变,不会自动同步到视图显示,需要我们再一次用 QDeclarativeContext::setContextProperty() ,重新设定模型。

voidQDeclarativeContext::setContextProperty( const QString &name,const QVariant & value )
使用这个函数,将list导入到qml中为model对象,

思路:在读取txt文件的时候,动态创建append数据到list,最后用setContextProperty函数通知更新qml中的model对象。

步骤:
①定义个类class 用来表示商品的类
②为这个类组成几个队列,这些队列是要插入显示到QML中的
③导出这些list 增加更新功能,当list被刷新的时候,要重新注册setContextProperty()

QStringList dataList;
dataList.append("Item 1");
dataList.append("Item 2");
dataList.append("Item 3");
dataList.append("Item 4");
QDeclarativeView view;
QDeclarativeContext *ctxt =view.rootContext();
ctxt->setContextProperty("myModel",QVariant::fromValue(dataList));

最后在QML文件中可以使用myModel这个对象model数据

一定要用QStringList的类吗?自定义的链表类呢?

目标:(分步)
①写一个list能够插入到QML中,不做任何操作
②在QML-UI中修改某一个变量,而使得C++中能够接受到相应的修改
③能够在C++动态增加appenddelete某个ListItem元素
④细化List的分类等等其他情况

楼主
发表于 2013-7-17 08:50:41
回复

使用道具 举报

openKylin

GMT+8, 2024-7-1 11:27 , Processed in 0.021756 second(s), 18 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表