QML----复制指定下标的ListModel数据

news/2024/11/8 2:59:21/

我现在有一个写好的listmodel,我需要从里边抽取35个数据作为展示

头文件

#ifndef GETONEPAGESIZEMEMBERLISTMODEL_H
#define GETONEPAGESIZEMEMBERLISTMODEL_H#include <QObject>
#include <QAbstractListModel>
#include <QDebug>
#include "mylistmodel.h" // 引入 需要复制的listmodel的头文件// MYListModel 类用于从源模型中提取一页大小的数据
class GetOnePageSizeMemberListModel : public GroupMemberListModel {Q_OBJECT // 宏,允许使用 Qt 的信号和槽机制public:// 构造函数,初始化源模型和分页信息explicit GetOnePageSizeMemberListModel(QAbstractListModel *sourceModel, int start, int end, QObject* parent = nullptr);// 返回行数,重写基类方法int rowCount(const QModelIndex &parent = QModelIndex()) const override;// 返回特定索引处的数据,重写基类方法QVariant data(const QModelIndex& index, int role) const override;friend class CopyModelManager; // 声明 CopyModelManager 为友元类,允许其访问私有成员private:QAbstractListModel *m_sourceModel; // 源模型的指针int m_start; // 起始索引int m_end;   // 结束索引
};// CopyModelManager 类用于管理模型的复制操作
class CopyModelManager : public QObject {Q_OBJECT // 宏,允许使用 Qt 的信号和槽机制public:// 构造函数explicit CopyModelManager(QObject* parent = nullptr);// 获取单例实例static CopyModelManager* getCopyModelHandle();// 创建并返回一个复制的模型Q_INVOKABLE MyListModel* createCopyModel(QAbstractListModel *sourceModel, int start, int end, QObject* parent = nullptr);private:static CopyModelManager* m_pCopyModelHandle; // 单例模型的指针
};#endif // GETONEPAGESIZEMEMBERLISTMODEL_H

cpp

#include "getonepagesizememberlistmodel.h"// GetOnePageSizeMemberListModel 的构造函数
GetOnePageSizeMemberListModel::GetOnePageSizeMemberListModel(QAbstractListModel *sourceModel, int start, int end, QObject *parent): QAbstractListModel(parent), // 初始化基类m_sourceModel(sourceModel),  // 保存源模型指针m_start(start),              // 保存起始索引m_end(end)                  // 保存结束索引
{
}// 重写 rowCount 方法,返回当前页的数据行数
int GetOnePageSizeMemberListModel::rowCount(const QModelIndex &parent) const
{// 计算并返回有效的行数return std::max(0, std::min(m_end, m_sourceModel->rowCount()) - m_start);
}// 重写 data 方法,返回指定索引的数据
QVariant GetOnePageSizeMemberListModel::data(const QModelIndex &index, int role) const
{// 检查索引的有效性if (index.row() < 0 || index.row() >= rowCount()) {return QVariant(); // 返回无效 QVariant}// 从原始模型复制数据,返回指定角色的数据return m_sourceModel->data(m_sourceModel->index(index.row() + m_start, 0), role);
}// CopyModelManager 的静态成员初始化
CopyModelManager* CopyModelManager::m_pCopyModelHandle = nullptr;// CopyModelManager 的构造函数
CopyModelManager::CopyModelManager(QObject *parent) : QObject(parent) {
}// 获取 CopyModelManager 的单例实例
CopyModelManager *CopyModelManager::getCopyModelHandle()
{if (nullptr == m_pCopyModelHandle) {m_pCopyModelHandle = new CopyModelManager(); // 创建单例}return m_pCopyModelHandle; // 返回单例指针
}// 创建并返回一个复制的模型
MyListModel* CopyModelManager::createCopyModel(QAbstractListModel *sourceModel, int start, int end, QObject *parent)
{// 创建 GetOnePageSizeMemberListModel 的实例MyListModel *copyListModel = new GetOnePageSizeMemberListModel(sourceModel, start, end, parent);return copyListModel; // 返回复制模型
}

从原始模型复制数据,rowcount返回的是获取数据的行数,data返回获取的第一个数据的下标.
随后在qml中注册类,调用createCopyModel(originListModel,0,35),就能得到原始model的前35个数据


http://www.ppmy.cn/news/1545233.html

相关文章

七.numpy模块

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发&#xff0c;2005 年&#xff0c;Travis Oliphant…

江西省技能培训平台(逆向破解登录国密SM2)

江西省技能培训平台(逆向破解登录) 登录破解(国密sm2加密方式) 请求接口 https://api.cloud.wozhipei.com/auth/user/v1/login 使用身份证和密码登录发现有password加密&#xff0c;好开始逆向js 全局搜索发现使用国密SM2进行加密 模拟算法 js 使用js进行模拟算法 <…

Java项目实战II基于Spring Boot的便利店信息管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的…

基于C++的决策树C4.5机器学习算法(不调包)

目前玩机器学习的小伙伴&#xff0c;上来就是使用现有的sklearn机器学习包&#xff0c;写两行代码&#xff0c;调调参数就能跑起来&#xff0c;看似方便&#xff0c;实则有时不利于个人能力发展&#xff0c;要知道现在公司需要的算法工程师&#xff0c;不仅仅只是会调参&#x…

分布式中常见的问题及其解决办法

分布式中常见的问题及其解决办法 一、多个微服务要操作同一个存储在redis中的变量&#xff0c;如何确保这个变量的正确性 答&#xff1a; 在多个微服务操作同一个存储在Redis中的变量时&#xff0c;可以采取以下措施来确保变量的正确性&#xff1a; 1、使用Redis的事务&…

JAVA题目笔记(十三) 爬虫

一、网络爬取 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern;public class Main {public static v…

HTML 标签属性——<a>、<img>、<form>、<input>、<table> 标签属性详解

文章目录 1. `<a>`元素属性hreftargetname2. `<img>`元素属性srcaltwidth 和 height3. `<form>`元素属性actionmethodenctype4. `<input>`元素属性typevaluenamereadonly5. `<table>`元素属性cellpaddingcellspacing小结HTML元素除了可以使用全局…

【前端基础】CSS基础

目标&#xff1a;掌握 CSS 属性基本写法&#xff0c;能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#…