058-第三代软件开发-文件Model

第三代软件开发-文件Model
文章目录
- 第三代软件开发-文件Model
- 项目介绍
- 文件Model
关键字:
Qt
、
Qml
、
关键字3
、
关键字4
、
关键字5
项目介绍
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。
在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。
在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。
无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!
重要说明☝
☀该专栏在第三代软开发更新完将涨价
文件Model
这个就是想做一个通用一点的model,因为我需要知道我的文件夹下的mp4 和pdf 文件,这两个除了类型不同,其他功能都相同,所以就有了这个,代码如下
头文件
#ifndef XXXX_FILEMODEL_H
#define XXXX_FILEMODEL_H#include <QAbstractListModel>class XXXX_FileModel : public QAbstractListModel
{Q_OBJECTenum FileType{Name,};Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged FINAL)public:explicit XXXX_FileModel(QObject *parent = nullptr);// Header:QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;// Basic functionality:int rowCount(const QModelIndex &parent = QModelIndex()) const override;// Fetch data dynamically:bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;bool canFetchMore(const QModelIndex &parent) const override;void fetchMore(const QModelIndex &parent) override;QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;QHash<int,QByteArray> roleNames() const override;// Editable:bool setData(const QModelIndex &index, const QVariant &value,int role = Qt::EditRole) override;Qt::ItemFlags flags(const QModelIndex& index) const override;// Add data:bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;// Remove data:bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;QString path() const;void setPath(const QString &newPath);signals:void pathChanged();protected:void updateFile();private:QString m_path = "/home";QStringList m_fileList;
};#endif // XXXX_FILEMODEL_H
源文件
#include "XXXX_filemodel.h"
#include "qdebug.h"
#include "qdir.h"XXXX_FileModel::XXXX_FileModel(QObject *parent): QAbstractListModel(parent)
{updateFile();
}QVariant XXXX_FileModel::headerData(int section, Qt::Orientation orientation, int role) const
{// FIXME: Implement me!
}bool XXXX_FileModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
{if (value != headerData(section, orientation, role)) {// FIXME: Implement me!emit headerDataChanged(orientation, section, section);return true;}return false;
}int XXXX_FileModel::rowCount(const QModelIndex &parent) const
{// For list models only the root node (an invalid parent) should return the list's size. For all// other (valid) parents, rowCount() should return 0 so that it does not become a tree model.if (parent.isValid())return 0;// FIXME: Implement me!return m_fileList.count();
}bool XXXX_FileModel::hasChildren(const QModelIndex &parent) const
{// FIXME: Implement me!
}bool XXXX_FileModel::canFetchMore(const QModelIndex &parent) const
{// FIXME: Implement me!return false;
}void XXXX_FileModel::fetchMore(const QModelIndex &parent)
{// FIXME: Implement me!
}QVariant XXXX_FileModel::data(const QModelIndex &index, int role) const
{if (!index.isValid())return QVariant();// FIXME: Implement me!if(m_fileList.count() > 0)return m_fileList.at(index.row());return QVariant();
}QHash<int, QByteArray> XXXX_FileModel::roleNames() const
{QHash<int,QByteArray> roles;roles.insert(FileType::Name,"name");return roles;
}bool XXXX_FileModel::setData(const QModelIndex &index, const QVariant &value, int role)
{if (data(index, role) != value) {// FIXME: Implement me!emit dataChanged(index, index, {role});return true;}return false;
}Qt::ItemFlags XXXX_FileModel::flags(const QModelIndex &index) const
{if (!index.isValid())return Qt::NoItemFlags;return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; // FIXME: Implement me!
}bool XXXX_FileModel::insertRows(int row, int count, const QModelIndex &parent)
{beginInsertRows(parent, row, row + count - 1);// FIXME: Implement me!endInsertRows();return true;
}bool XXXX_FileModel::removeRows(int row, int count, const QModelIndex &parent)
{beginRemoveRows(parent, row, row + count - 1);// FIXME: Implement me!endRemoveRows();return true;
}QString XXXX_FileModel::path() const
{return m_path;
}void XXXX_FileModel::setPath(const QString &newPath)
{if (m_path == newPath)return;m_path = newPath;emit pathChanged();updateFile();
}void XXXX_FileModel::updateFile()
{QDir folder(m_path);m_fileList.clear();m_fileList = folder.entryList(QDir::Files);foreach(QString file, m_fileList){qDebug() << file;}
}

相关文章:

058-第三代软件开发-文件Model
第三代软件开发-文件Model 文章目录 第三代软件开发-文件Model项目介绍文件Model 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language)…...

【领域驱动设计 学习目标及大纲】从CRUD到架构设计
从2018年至今,已工作了5年有余,回望这5年的工作历程,虽然一直在学习、一直在积累,但其实都在术的层面上停留,也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法: 一次是2018年刚工作的时候&am…...

asla四大开源组件应用示例(alsa-lib、alsa-utils、alsa-tools、alsa-plugins)
文章目录 alsa设备文件/dev/snd//sys/class/sound/proc/asoundalsa-lib示例1alsa-utilsalsa-toolsalsa-plugins参考alsa设备文件 /dev/snd/ alsa设备文件目录位于,/dev/snd,如下所示 root@xboard:~#ls /dev/snd -l total 0 drwxr-xr-x 2 root root 60 Nov 6 2023 …...

文档理解的新时代:LayOutLM模型的全方位解读
一、引言 在现代文档处理和信息提取领域,机器学习模型的作用日益凸显。特别是在自然语言处理(NLP)技术快速发展的背景下,如何让机器更加精准地理解和处理复杂文档成为了一个挑战。文档不仅包含文本信息,还包括布局、图…...
【二叉树】Leetcode 637. 二叉树的层平均值
637.二叉树的层平均值 解题思路 根据层序遍历的模板进行修改;主要的不同是,不需要输出每一层所有节点值,只需要输出平均值,只需要定义一个double双精度浮点数储存每一层数的总和,输出时将总和除以层节点总数即为层平均…...
设计模式-15-Jdk源码中的设计模式
之前我们学习了一些设计模式,今天我们剖析Java JDK 源码中用到的几种常见的设计模式。 1-jdk之工厂模式 在前面讲到工厂模式的时候,大部分工厂类都是以Factory作为后缀来命名,并且工厂类主要负责创建对象这样一件事情。但在实际的项目开发中…...

Vue框架学习笔记——事件scroll和wheel的区别
文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录,如有错误,请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条,无论你拖拽滚动条,选中滚动条之后按键盘…...

【LeetCode】每日一题 2023_11_29 无限集中的最小数字(哈希/堆)
文章目录 刷题前唠嗑题目:无限集中的最小数字题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode?启动!!! 今天的题目也比较的简单,因为数据量不大,所以什么做法都能过的去 题目&a…...
C/C++ 常用的四种查找算法
在计算机科学中,搜索算法是一种用于在数据集合中查找特定元素的算法。C语言作为一种强大的编程语言,提供了多种搜索算法的实现方式。本文将介绍C语言中的四种常见搜索算法其中包括(线性查找,二分法查找,树结构查找&…...

Linux | Ubuntu设置 netstat(网络状态)
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 1.netstat的安装 搜…...

成为AI产品经理——模型构建流程(下)
目录 1.模型训练 2.模型验证 3.模型融合 4.模型部署 上节课我们讲了模型设计、特征工程,这节课我们来讲模型构建剩下的三个部分:模型训练、模型验证和模型融合。 1.模型训练 模型训练就是要不断地训练、验证、调优直至让模型达到最优。 那么怎么达…...
TCP Socket API 讲解,以及回显服务器客户端的实现
文章目录 TCPServerSocket APISocket API TCP 客户端服务器的实现 TCP ServerSocket API ServerSocket 是创建TCP服务端 Socket 的 API。 serverSocket构造方法: 方法签名方法说明ServerSocket(int port)创建一个服务端流套接字Socket,并绑定到指定端…...

2023年掌控安全学院CTF暖冬杯——数据流分析
前言:打工仔一枚,第一波上新的3题misc 做完了 再打ISCTF随便记录一下 PS:环境关了,题目描述忘记了,反正就是找flag。 筛选HTTP数据流 导出数据流慢慢看 ctrl F 搜flag 看到一条 有flag.txt 的数据 导出另存.zip 这里…...

UE4 基础篇十四:自定义插件
文末有视频地址和git地址 一、概念 虚幻里插件都是用C++写的,C++包括.h文件和.cpp文件,.h头文件通常包含函数类型和函数声明,cpp文件包含这些类型和函数的实现, 你为项目编写的所有代码文件都必须位于模块中,模块就是硬盘里的一个文件夹,包含名为“Build.cs”的C#文件…...

QT QGraphicsItem 图元覆盖导致鼠标点击事件不能传递到被覆盖图元
一、概述 在日常开发中,遇到这样一个问题,线图元和引脚图元重叠,导致点击引脚图元,没有进入引脚图元的鼠标点击事件中。 二、产生原因 如果您的 QGraphicsItem 上有一个图元覆盖了它,可能会导致鼠标事件无法正常触发…...
proto语法学习笔记
proto语法学习笔记 Protocol Buffers(Proto是由谷歌开发的一种数据序列化格式。 Proto 不是一种编程语言,而是一种接口描述语言(IDL),用于定义数据结构和消息格式。 它的设计目标是提供一种简单、高效、可扩展的方法来…...

python-nmap库使用教程(Nmap网络扫描器的Python接口)(功能:主机发现、端口扫描、操作系统识别等)
文章目录 Python-nmap库使用教程前置条件引入python-nmap创建Nmap扫描实例执行简单的主机发现(nmap -sn)示例,我有一台主机配置为不响应 ICMP 请求,但使用nmap -sn,仍然能够探测到设备: 端口扫描扫描特定端…...

什么是智慧工地?
一、什么是智慧工地? 工地本身不拥有智慧,工地的运作是依赖于人的智慧。工地信息化技术,能够减少对人的依赖,使工地拥有智慧。 智慧工地,就是立足于“智慧城市”和“互联网”,采用云计算、大数据和物联网等…...

【古月居《ros入门21讲》学习笔记】08_发布者Publisher的编程实现
目录 说明: 1. 话题模型 图示 说明 2. 实现过程(C) 创建功能包 创建发布者代码(C) 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程(Python) 创建发布者代码(…...

沿着马可·波罗的足迹,看数字云南
刚入行的时候,有位前辈跟我说过一句话:去现场“要像外国人一样去看”,重新审视那些自己可能早已“熟视无睹”的事物。 前不久,我跟随“看见数字云南——云南数字经济媒体探营活动”,奔赴昆明、大理、西双版纳等地&…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...