Qt文档阅读笔记-Fetch More Example解析

news2024/11/23 14:59:26

Fetch More Example这个例子说明了如何在视图模型上添加记录。

这个例子由一个对话框组成,在Directory的输入框中,可输入路径信息。应用程序会载入路径信息的文件信息等。不需要按回车键就能搜索。

当有大量数据时,需要对视图模型进行批量增加。

此案例,实现了FileListModel类,此类包含了一个视图模型,这个视图模型获取路径下的文件。

下面来看下FileListModel的代码。

FileListModel Class Definition

FileListModel继承了QAbstractListModel并且存储了路径信息。只有视图自己请求添加项时,才会进行添加。

 class FileListModel : public QAbstractListModel
 {
     Q_OBJECT

 public:
     FileListModel(QObject *parent = 0);

     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;

 signals:
     void numberPopulated(int number);

 public slots:
     void setDirPath(const QString &path);

 protected:
     bool canFetchMore(const QModelIndex &parent) const override;
     void fetchMore(const QModelIndex &parent) override;

 private:
     QStringList fileList;
     int fileCount;
 };

比较关键的2个函数是fetchMore()和canFetchMore(),这两个函数都是从QAbstractItemModel中继承下来的。当需要新增模型时,这2个函数就会被触发。

setDirPath()函数设置了当前模型的工作目录。当需要批量设置模型时,就会发出numberPopulated()信号。

所有文件条目都放到fileList里面,fileCount统计条目的数量。

FileListModel Class Implementation

首先来看下setDirPath()。

 void FileListModel::setDirPath(const QString &path)
 {
     QDir dir(path);

     beginResetModel();
     fileList = dir.entryList();
     fileCount = 0;
     endResetModel();
 }

使用QDir获取目录内容。当要从模型中移除所有数据时需要通知QAbstractItemModel。

 bool FileListModel::canFetchMore(const QModelIndex & /* index */) const
 {
     if (fileCount < fileList.size())
         return true;
     else
         return false;
 }

当需要更多项时,canFetchMore()函数会被触发。当不需要新增时此函数返回true,否则返回false。fetchMore()函数如下:

 void FileListModel::fetchMore(const QModelIndex & /* index */)
 {
     int remainder = fileList.size() - fileCount;
     int itemsToFetch = qMin(100, remainder);

     if (itemsToFetch <= 0)
         return;

     beginInsertRows(QModelIndex(), fileCount, fileCount+itemsToFetch-1);

     fileCount += itemsToFetch;

     endInsertRows();

     emit numberPopulated(itemsToFetch);
 }

首先获取每一项的数量。beginInsertRow()和endInsertRow()在QAbstractItemModel中插入新行时,必须要调用的,最后emit numberPopulated()用于更新界面。

最后是rowCount()和data()

int FileListModel::rowCount(const QModelIndex & /* parent */) const
 {
     return fileCount;
 }

 QVariant FileListModel::data(const QModelIndex &index, int role) const
 {
     if (!index.isValid())
         return QVariant();

     if (index.row() >= fileList.size() || index.row() < 0)
         return QVariant();

     if (role == Qt::DisplayRole) {
         return fileList.at(index.row());
     } else if (role == Qt::BackgroundRole) {
         int batch = (index.row() / 100) % 2;
         if (batch == 0)
             return qApp->palette().base();
         else
             return qApp->palette().alternateBase();
     }
     return QVariant();
 }

rowCount()函数是已经添加了的新行,不是目录中的条目数。

data()函数,从fileList中返回适当的条目。使用不同的背景颜色来区分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1201647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php在线审稿系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 php在线审稿系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php在线审稿系统 代码 https://download.csdn.net/download/qq_41221322/885…

【教3妹学编程-算法题】重新排列后包含指定子字符串的字符串数目

3妹&#xff1a;1 8得8&#xff0c;2 816&#xff0c; 3 8妇女节… 2哥 : 3妹&#xff0c;在干嘛呢 3妹&#xff1a;双11不是过了嘛&#xff0c; 我看看我这个双十一买了多少钱&#xff0c; 省了多少钱。 2哥 : 我可是一分钱没买。 3妹&#xff1a;我买了不少东西&#xff0c; …

【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程程序替换 1. 前言2. exec…

固定主机1500PLC与两台移动1200PLC之间以太网通讯

本方案搭建的是固定主机1500PLC与两台移动1200PLC之间以太网通讯。 无线通讯网络搭建 首先在固定端主机设备上的西门子S7-1500PLC上搭载一块达泰DTD418MB作为主站。然后在两台移动的西门子S7-1200PLC上分别搭载一块达泰DTD418MB作为从站。由此&#xff0c;便通过DTD418MB搭建…

线程的互斥

目录 线程互斥 线程互斥的背景知识 多线程抢票 多线程抢票加锁 锁的原理 可重入函数与线程安全 常见的线程安全的情况 常见的不可重入情况 常见的可重入情况 总结 线程互斥 线程互斥的背景知识 临界资源&#xff1a;临界资源就是多个执行流共享的资源就叫做临界资源…

勘察设计考试公共基础之物理篇

2、物理 理想气体的压强P23nw &#xff08;n为分子的密度数&#xff09;&#xff0c;w12mv2 &#xff08;m为分子质量&#xff09;&#xff0c;v2 为分子速率平方的平均值。PnKT&#xff0c;∴w32KT 即&#xff1a;理想气体分子的平均平动动能与气体的温度成正比&#xff0c;气…

【商城更新】神秘市场通行证上架、齿轮头归来//及下架内容

本周商城将于11月8号更新。本次商城除了神秘市场2023通行证上架之外&#xff0c;还有齿轮头黑货箱也会上架藏匿处。随之小兔奇趣齐聚大礼包、危险玩偶大礼包等饰品下架商城。 上架饰品&#xff1a; ▲神秘市场2023通行证 神秘市场2023通行证基础版 售价&#xff1a;1200G-coi…

Xilinx Artix7-100T低端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…

实验一 Anaconda安装和使用(Python程序设计实验报告)

实验一 Anaconda安装和使用 一、实验环境 Python集成开发环境IDLE/Anaconda 二、实验目的 1&#xff0e;掌握Windows下Anaconda的安装和配置。 2. 掌握Windows下Anaconda的简单使用&#xff0c;包括IDLE、Jupyter Notebook、Spyder工具的使用。 3. 掌握使用pip管理Python扩展库…

中国专利转让数据集(1985-2021年)

专利转让数据追踪和记录专利从一个实体转移到另一个实体的过程。这些数据不仅包括参与转让的申请人和受让人的身份信息&#xff0c;如名字和地址&#xff0c;还涵盖了转让的具体法律细节&#xff0c;包括转让执行日、转让次数、法律状态变更&#xff0c;以及转让登记的相关信息…

FL Studio最新版本号21.2发行更新啦

Image Line宣布发布FL Studio 21.2。更新带来了许多改进&#xff0c;但主要功能是引入了新的词干分离功能和FL Cloud&#xff0c;这是一个新的在线平台&#xff0c;直接与DAW集成&#xff0c;为用户提供从循环和样本到母带和发行功能的一切。 词干分离与FL云 随着最新更新的发…

AI生成PPT工具——Gamma,结合GPT生成不错的效果

AI生成PPT工具——Gamma&#xff0c;结合GPT生成不错的效果 先告诉GPT我现在要参加一个比赛&#xff0c;请他帮忙梳理一下内容。当然整个过程需要不断调整&#xff0c;GPT生成的内容也不是一次就是最好的 不断调整之后让其列出提纲即可&#xff0c;如下&#xff1a; 紧接着我们…

谈谈前端如何防止数据泄露

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 最近突然发现了一个好玩的事情&#xff0c;部分网站进去的时候几乎都是死的&#xff0c;那种死是区别于我们常见…

【Hadoop】MapReduce详解

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f…

讨论编程建议,生成需求文档:SolidGPT 对话代码,智能互动 | 开源日报 No.73

vuejs/vue Stars: 205.6k License: MIT Vue 是一个用于构建用户界面的渐进式框架。它从头开始设计&#xff0c;可以根据不同的使用情况轻松地在库和框架之间进行扩展。Vue 由一个专注于视图层的核心库组成&#xff0c;并且还有一系列支持性库来帮助您处理大型单页应用程序中的…

哈夫曼树(定义,构造,哈夫曼编码)

目录 1.带权路径长度2.哈夫曼树的定义3.哈夫曼树的构造1.哈夫曼树的特性 4.哈夫曼编码1.编码方式2.应用 1.带权路径长度 ①结点的权:有某种现实含义的数值&#xff08;如:表示结点的重要性等) ②结点的带权路径长度:从树的根到该结点的路径长度&#xff08;经过的边数&#xff…

光明源@智慧公厕是如何提升城市人们生活质量的?

随着城市人口不断增加&#xff0c;城市生活质量成为社会关注的焦点。在城市规划中&#xff0c;智慧公厕作为一项创新的基础设施&#xff0c;正日益受到重视。它们不仅提供卫生便捷的服务&#xff0c;还通过科技的运用&#xff0c;显著提升了城市居民的生活质量。本文将深入探讨…

C++进阶篇4---番外-红黑树

一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0…

Springboot项目部署及多环境开发

一、项目部署 我们之前写的代码都是部署在本地的tomcat上&#xff0c;别人是无法访问我们写的程序的。在实际开发中&#xff0c;我们都要将开发完毕的项目部署到公司的服务器上。 我们的代码需要经过编译打包生成一个jar包&#xff0c;这个过程需要借助一个插件来实现。 创建sp…

Linux常用命令——bzip2recover命令

在线Linux命令查询工具 bzip2recover 恢复被破坏的.bz2压缩包中的文件 补充说明 bzip2recover命令可用于恢复被破坏的“.bz2”压缩包中的文件。 bzip2是以区块的方式来压缩文件&#xff0c;每个区块视为独立的单位。因此&#xff0c;当某一区块损坏时&#xff0c;便可利用b…