Qt ListView 刷新数据
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
在之前的例子中做一些修改,首先不显示ListViewModel数据,当点击鼠标后,显示数据。
几个要点:
用Q_INVOKABLE 创建C++的方法,这样可以在Qml中直接调用
清除model里面的数据必须用beginResetModel和endResetModel方法将清除代码包起来。
看一下完整的代码:
test.qml
import QtQuick 2.0import mylist 1.0ListView { width: 180; height: 200 model: PeopleListModel { id: model1 } delegate: Text { text: name + ": " + number } MouseArea { anchors.fill: parent onClicked: model1.reload(); } }
plugin.cpp
#include <QtQml/QQmlExtensionPlugin>#include <QtQml/qqml.h>#include <qdebug.h>#include <qdatetime.h>#include <qbasictimer.h>#include <qcoreapplication.h>#include <QAbstractItemModel>#include <QStringList>#include <iostream>class People {public: People(QString const & name, QString const & number) : name_(name), number_(number) { } QString name() const { return name_; } QString number() const { return number_; }private: QString name_; QString number_;};class PeopleListModel : public QAbstractListModel { Q_OBJECTpublic: enum PeopleRoles { NameRole = Qt::UserRole + 1, NumberRole }; PeopleListModel(QObject * parent = 0) : QAbstractListModel(parent) { /* People p1("Dean", "186***"); addPeople(p1); People p2("Crystal", "186***"); addPeople(p2);*/ } void addPeople(People const & p) { beginInsertRows(QModelIndex(), rowCount(), rowCount()); values_ << p; endInsertRows(); } int rowCount(QModelIndex const & parent = QModelIndex()) const { return values_.count(); } QVariant data(QModelIndex const & index, int role = Qt::DisplayRole) const { std::cout << "data()" << std::endl; std::cout << "index row: " << index.row() << " index column: " << index.column() << std::endl; if (index.row() < 0 || index.row() >= values_.count()) { std::cout << "s1" << std::endl; return QVariant(); } People const & p = values_[index.row()]; std::cout << "role: " << role << std::endl; if (role == NameRole) { return p.name(); } else if (role == NumberRole) { return p.number(); } return QVariant(); } Q_INVOKABLE void reload() { std::cout << "--------------------" << std::endl; std::cout << "reload()" << std::endl; beginResetModel(); values_.clear(); endResetModel(); People p1("Dean", "176***"); addPeople(p1); People p2("Crystal", "176***"); addPeople(p2); std::cout << "values count: " << values_.count() << std::endl; }protected: QHash<int, QByteArray> roleNames() const { QHash<int, QByteArray> roles; roles[NameRole] = "name"; roles[NumberRole] = "number"; return roles; }private: QList<People> values_;};class QExampleQmlPlugin : public QQmlExtensionPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtension.PeopleListModel") public: void registerTypes(char const * uri) { qmlRegisterType<PeopleListModel>(uri, 1, 0, "PeopleListModel"); }};#include "plugin.moc"
运行效果,刚开始什么都没有,点击后出现数据。
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
Qt ListView 刷新数据相关推荐
- android listview 刷新数据,ListView中notifyDataSetChanged()刷新数据不更新原因分析
标题 : 不作死就不会死!!!!!! 类 : ActivityA,ActivityB,BookListAdapter,Book,HttpManager 测试顺序 : ActivityA >> ...
- Android列表分页功能的实现,往下拉时刷新数据(显示正在加载中)
1.需要在AndroidManifest.xml清单文件中获取InterNet权限 2.重写ListView控件(创建RefreshListView.java,继承自ListView) package ...
- 关于ListView中notifyDataSetChanged()刷新数据不更新原因
使用Listview的时候: 当要动态显示更改后的 数据 (例如 数据 库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的 数据 . ...
- listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. 本实例运行效果如下 : //启动函数void main() { runApp(Root ...
- android 下拉刷新数据,如何剥离Android页面下拉刷新、加载下一页等逻辑?
最近碰到一个新的页面控制需求:下拉刷新如果失败,listview上面的数据需要保留,然后悲剧的发现之前写的NetFragment和ListNetFragment都不能覆盖这种逻辑,又要重写了.痛定思痛 ...
- listview刷新(litepal)
问题 如何单独刷新listview,并且不影响布局上的数据 litepal-到–>list数据表-到---->Adapter----到->显示在listview上. 要刷新listv ...
- ListView的数据排序示例
ListView的数据排序示例 ListView中经常要用到对里面的条目的某一个数据进行排序,比如商品的价格.销售量,机票的数量.价格等.并且有些还要对某些条目进行记录(删除或保留另用).这里简单实现 ...
- Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染
在Javascript代码里,都是按照一定顺序来执行的,当轮到一个代码片段执行的时候,浏览器就只会去执行当前的片段,不会做任何其他的事情.所以有时候一些做得不是很好的网页,当点击了某个东西之后会卡住, ...
- html页面关闭前提示信息,【转】表单提交及关闭当前页面并刷新数据
在DWZ文档中,对于DWZ框架Ajax无刷新表单提交处理流程描述如下: 1. ajax表单提交给服务器 2. 服务器返回一个固定格式json结构 3. js会调函数 ...
- 解决ViewPager缓存导致不能实时刷新数据
ViewPager+Fragment,但是Fragment有个不好或者太好的地方.例如你在ViewPager中添加了三个Fragment,当加载ViewPager中第一个Fragment时,它会默认帮 ...
最新文章
- R使用Iris数据集构建SVM分类器
- AI时代,企业如何利用机器学习技术驱动业务发展?
- 1013. 数素数 (20)
- 子域名/目录暴力工具Gobuster
- Spring Data JPA单元测试 Not a managed type
- 对象序列化(六):应用实例-WPF对象的XAML序列化
- python编程菱形_Python打印“菱形”星号代码方法
- 集合源码阅读:LinkedList
- 安卓线程同步面试_Android面试题
- 基于springboot的美食系统
- java鼠标点击按钮_Java 模拟鼠标事件 java中控制鼠标点击的方法
- 软件测试用例设计方法等价划分法
- Jmeter使用Dubbo插件测试RPC接口
- 系统设计系列之如何设计一个短链服务
- 数据挖掘 - 二手车交易价格预测(阿里天池)
- 红茶保质期一年半,我都放了五年了,打开还有茶味,能喝吗?
- 计算机游戏攻略32关,保卫萝卜3游乐场第32关通关攻略 保卫萝卜3分享
- 湖南省第十届蓝狐网络杯大学生计算机程序设计竞赛,2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解...
- java关键字8:implement关键字
- EIE结构与算法映射