qml listview数据刷新后保持原来的位置

fendou1003 2014-08-29 02:13:56
由于项目需要,我用C++创建数据model,缓存200条数据,当listview下拉显示100条数据时,采用滑窗的方式,清除数据缓存并请求添加新的数据,现在遇到的问题时,数据的清除和刷新没有问题,可是数据刷新后,listview的显示位置发生跳变。

假设清除掉50条数据,listview会从50条数据后开始显示,可是之前已经下拉到100的位置,这样数据显示不能连续。想问问大家,QAbstractItemModel中有处理显示位置的方法吗?或者更合理的model数据缓存方案?非常感谢。
...全文
859 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fendou1003 2014-09-05
  • 打赏
  • 举报
回复
引用 9 楼 foruok 的回复:
亲们,哥哥搞定了。看我的博客:http://blog.csdn.net/foruok/article/details/39052729
恩,很有帮助,正在验证加载数据的效果。非常感谢版主!!
foruok 2014-09-04
  • 打赏
  • 举报
回复
亲们,哥哥搞定了。看我的博客:http://blog.csdn.net/foruok/article/details/39052729
foruok 2014-09-04
  • 打赏
  • 举报
回复
引用 5 楼 fendou1003 的回复:
[quote=引用 3 楼 foruok 的回复:] 关键点在于,Model提供的ModelIndex与数据部分的映射,当data()被调用时,要动态的完成这个映射,提供数据。
版主可以再给些提示吗?非常感谢。[/quote] 兄弟,先告诉怎样判断向上滑动和向下滑动,我已经实现了滑窗,但是区分不出来向前滑还是向后滑。
fendou1003 2014-09-03
  • 打赏
  • 举报
回复
引用 6 楼 foruok 的回复:
等我这两天有时间做个例子出来,思路就是这样,你先琢磨着。
恩,好的,谢谢大神,我也再想想。期待你的例子。
foruok 2014-09-03
  • 打赏
  • 举报
回复
等我这两天有时间做个例子出来,思路就是这样,你先琢磨着。
fendou1003 2014-09-03
  • 打赏
  • 举报
回复
引用 3 楼 foruok 的回复:
关键点在于,Model提供的ModelIndex与数据部分的映射,当data()被调用时,要动态的完成这个映射,提供数据。
版主可以再给些提示吗?非常感谢。
foruok 2014-09-01
  • 打赏
  • 举报
回复
关键点在于,Model提供的ModelIndex与数据部分的映射,当data()被调用时,要动态的完成这个映射,提供数据。
fendou1003 2014-09-01
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
我判断你这是c++ model实现的有问题。
贴代码出来看看,尤其是你所谓的滑窗,如何更新model,如何调用QAbstractItemModel提供的那些虚函数的。
建议的结构:

ListView <----> C++ Model <-----> Data Factory

当数据变化时,调用beginResetModel()/endResetModel(),在它们之间,完成 C++ Model到 DataFactory之间的数据关系映射,这样ListView再取数据时自动就更新了。


非常感谢版主耐心的解答,我在实现model数据的删除及增加时,用的是beginRemoveRows/endRemoveRows及beginInsertRows/endInsertRows,并在数据处理后调layoutChanged()。根据版主提供的方案,在数据处理时都用beginResetModel()/endResetModel(),出来的效果是一样的,还是没有达到滑窗的效果。

当前代码的效果和期待的效果,在图中进行了说明。期待大神的解决方案,谢谢。
fendou1003 2014-09-01
  • 打赏
  • 举报
回复
引用 3 楼 foruok 的回复:
关键点在于,Model提供的ModelIndex与数据部分的映射,当data()被调用时,要动态的完成这个映射,提供数据。
QModelIndex与数据的映射,是重写index()虚方法中实现吗?版主可以提供一段示例代码?非常感谢,小弟是刚转过来做这个的,还不是太熟悉。
foruok 2014-08-31
  • 打赏
  • 举报
回复
我判断你这是c++ model实现的有问题。 贴代码出来看看,尤其是你所谓的滑窗,如何更新model,如何调用QAbstractItemModel提供的那些虚函数的。 建议的结构: ListView <----> C++ Model <-----> Data Factory 当数据变化时,调用beginResetModel()/endResetModel(),在它们之间,完成 C++ Model到 DataFactory之间的数据关系映射,这样ListView再取数据时自动就更新了。

21,464

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧