Qt 第34课、缓冲区操作与目录操作
创始人
2025-05-29 05:00:39
0

1、缓冲区操作

  • Qt 中缓冲区的概念
    — 缓冲区的本质为一段连续的存储空间(字节数组代表连续存储空间)
    — QBuffer 是 Qt 中缓冲区相关的类
    — 在 Qt 中可以将缓冲区看做一种特殊的 IO 设备
    — 文件流辅助类可以直接用于操作 缓冲区
  • QBuffer 缓冲区的使用方式
    在这里插入图片描述
  • QBuffer 缓冲区的使用场合
    1、在线程间进行不同类型的数据传递
    2、缓存外部设备中的数据返回
    3、数据读取速度小于数据写入速度
#include 
#include 
#include 
#include 
#include void write_buf(int type, QBuffer& buf)
{if(buf.open(QIODevice::WriteOnly)){QDataStream out(&buf);out << type;if(type == 0){out << QString("D.T.Software");out << QString("xiebs");}else if(type == 1){out << 3;out << 1415;}else if(type == 2){out << 3.1415;}buf.close();}
}void read_buf(QBuffer& buf)
{if(buf.open(QIODevice::ReadOnly)){QDataStream in(&buf);int type = -1;in >> type;if(type == 0){QString str1 = "";QString str2 = "";in >> str1;in >> str2;qDebug() << str1;qDebug() << str2;}else if(type == 1){int a = 0;int b = 0;in >> a;in >> b;qDebug() << a;qDebug() << b;}else if(type == 2){double value = 0;in >> value;qDebug() << value;}buf.close();}
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QByteArray array;QBuffer buf(&array);write_buf(1, buf);read_buf(buf);return a.exec();

在这里插入图片描述

2、目录操作

  • QDir 是 Qt 中功能强大的目录操作类
    — Qt 中的目录分隔符统一使用 '/'
    — QDir 能够对目录进行任意的操作(创建,删除,重命名)
    — QDir 能够获取目录在的所有条目(文件和文件夹)
    — QDir 能够使用过滤字符串获取指定条目
    — QDir 能够获取系统中的所有根目录
  • 目录操作基础示例
    在这里插入图片描述
#include 
#include 
#include 
#include void test_dir()
{const char* path = "C:/Users/xiebs/Desktop/QDir";QDir dir;if(!dir.exists(path)){dir.mkdir(path);}if(dir.exists(path)){dir.cd(path);QStringList list = dir.entryList();for(int i = 0; i < list.count(); i++){qDebug() << list[i];}}
}unsigned int calculate_size(QString PATH)
{QFileInfo info(PATH);unsigned int ret = 0;if(info.isFile()){ret = info.size();}else if(info.isDir()){QDir dir(PATH);QFileInfoList list = dir.entryInfoList();for(int i = 0; i < list.count(); i++){if((list[i].fileName() != ".") && (list[i].fileName() != "..")){ret += calculate_size(list[i].absoluteFilePath());}}}return ret;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//test_dir();qDebug() << calculate_size("C:/Users/xiebs/Desktop/QDir");return a.exec();
}

分析:

QStringList list = dir.entryList();

这条语句得出的 list[i] 是文件名,不是路径,所以用

QFileInfoList list = dir.entryInfoList();

这样得出的 list[i] 是这样的。
在这里插入图片描述
这种其实就不是我们所说的路径,所以在 list[i]之后加上 .absoluteFilePath()得到的就是我们常见的路径。
在这里插入图片描述
在这样的 list[i] 之后加上 .fileName()得到的就是文件名。

3、文件系统监视器

  • QFileSystemWatcher 用于监控文件和目录的状态变化
    — 能够监控特定目录和文件的状态
    — 能够同时对多个目录和文件进行监控
    — 当目录或者文件发生改变时将触发信号
    — 可以通过信号与槽的机制捕捉信号并做出响应
  • 文件监控示例
    在这里插入图片描述

Watch.h

#ifndef WATCHER_H
#define WATCHER_H#include 
#include class Watcher : public QObject
{Q_OBJECT
private:QFileSystemWatcher m_watcher;private slots:void statusChanged(const QString& path);public:explicit Watcher(QObject *parent = nullptr);void addPath(QString path);
};#endif // WATCHER_H

Watch.cpp

#include "Watcher.h"
#include Watcher::Watcher(QObject *parent) : QObject(parent)
{connect(&m_watcher, SIGNAL(fileChanged(const QString&)), this, SLOT(statusChanged(const QString&)));connect(&m_watcher, SIGNAL(directoryChanged(const QString&)), this, SLOT(statusChanged(const QString&)));
}void Watcher::statusChanged(const QString& path)
{qDebug() << path << "is changed!";
}void Watcher::addPath(QString path)
{m_watcher.addPath(path);
}

main.cpp

#include 
#include "Watcher.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);Watcher watcher;watcher.addPath("C:/Users/xiebs/Desktop/xiebs.txt");watcher.addPath("C:/Users/xiebs/Desktop/QDir");return a.exec();
}

在这里插入图片描述
addPath() 这个函数的意思是 如果路径存在,则将路径添加到文件系统监视程序。如果路径不存在,或者已经被文件系统监视程序监视,则不添加该路径。

4、小结

  • 缓冲区的本质为一段连续的内存空间
  • 在Qt 中可以将缓冲区看作一种特殊的IO设备
  • QDIr提供了功能强大的目录操作支持
  • QFileSystemWatcher 能够监控文件和目录的状态变化

相关内容

热门资讯

来厦门机场中转,这份攻略请收好... 端午假期临近,作为东南沿海重要的航空枢纽,厦门机场又将成为众多旅客的中转驿站。近日,记者实地探访厦门...
潮汕旅游3天大概要花多少钱,潮... 潮汕旅游3天大概要花多少钱,潮汕三日游价格一览表 作为一个对各地文化充满好奇的旅行爱好者,我一直对潮...
6人小团北疆大环线10日游全攻... 6人小团北疆大环线10日游全攻略 前期准备 1. 证件:身份证必带,它是出行、住宿、购票的关键。如有...
项目实战典型案例4——生产环境... 生产环境app打包导致不能自动升级的问题一:背景介绍问题背景:二...
PMP考前冲刺3.18 | 2... 题目1-2:1.由于团队分布在多个时区,一个虚拟团队的项项目经理难以跟踪...
COMSOL帮助文档使用总结 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮...
北京5日游旅游攻略怎么安排?省... 北京,这座古老与现代交织的城市,承载着千年的历史与文化。红墙黄瓦的故宫、雄伟壮丽的长城、烟波浩渺的颐...
Alibaba Nacos J... 简介Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configurati...
去一趟北京旅行5天多少钱?看完... 去一趟北京旅行5天多少钱?看完不花冤枉钱! 北京,这座承载着深厚历史文化底蕴的现代化大都市,以其独特...
宜昌三峡旅游攻略3天四晚跟团游... 最近,我有幸和朋友们一起踏上了前往宜昌三峡的旅程。宜昌三峡,那山清水秀、景色宜人的地方,一直是我向往...
暑假到四川5天4晚路线如何安排... 暑假到四川5天4晚路线如何安排?和老婆去四川旅游5日游参团人均800!必看 四川,一场绝美的五彩之...
湖南长沙到四川旅游5天4晚大概... 湖南长沙到四川旅游5天4晚大概多少钱,三大2小去四川5日游旅行社最新报价! 四川五日,邂逅梦幻之美...
票选结果揭晓!明年的乐高满赠套... 又一款乐高赠品即将登场! 这次,不是圣诞小屋、不是复古书本,而是——一艘 1992 年的中世纪小船:...
2024年“十大最美农村路”公... 交通运输部30日公布 2024年“十大最美农村路”名单 阡陌交通,串联幸福生活,助力乡村振兴 一起来...
原创 全... 在正式介绍今天的主角之前,我先给大家出个小问题哈:你们觉得全球岛屿最多的国家是哪个?估计不少朋友脑海...
2023.3.19 第四十五次... 目录 前言 文献阅读 背景 需要改进的方向 主要思路 模型开发 CNN 和 LSTM 之间的耦合  ...
p82 红蓝对抗-蓝队atck... 数据来源 必备知识点:         在每年的安全活动中,红...