Qt图形库概述:文件与目录
QIODevice类
QIODevice作为Qt中所有输入输出(IO)设备类的抽象基类,为各类IO操作提供了基础的功能接口,涵盖了设备的打开、关闭、数据读取和写入等操作。它还定义了一系列的枚举类型(例如OpenMode)以及信号槽机制,用于处理IO操作期间的状态变化和事件通知。
QIODevice属于抽象类,无法直接进行实例化。其他具体的IO设备类,如QFile、QBuffer等,均继承自QIODevice,以实现各自特定类型的IO操作。
重要成员函数
- open(OpenMode mode):此函数用于打开设备,其中OpenMode是一个枚举类型,可指定打开设备的模式,例如只读(ReadOnly)、只写(WriteOnly)、读写(ReadWrite)等。
- read(qint64 maxSize):从设备中读取数据,maxSize参数用于指定最多读取的字节数,函数返回读取到的数据,其类型为QByteArray。
- write(const QByteArray& byteArray):向设备写入数据,参数byteArray为要写入的数据,函数返回实际写入的字节数。
- close():用于关闭已打开的设备,释放相关资源。
信号与槽机制
- aboutToClose():当设备即将关闭时,会发射此信号。
- bytesWritten(qint64 bytes):在有数据写入设备时发射,参数bytes表示写入的字节数。
在Qt中IO操作的处理方式
- 统一的接口简化了文件与外部设备的操作方式
- Qt中的文件被看做是一种特殊的外部设备
- Qt中的文件操作与外部设备操作相同
Qt中IO设备类型
- 顺序存储设备:只能从头开始顺序读写数据,不能指定数据的读写位置(如串口)
- 随机存储设备:可以定位到任意位置进行数据读写(通过seek function函数)(如文件)
QT IO操作类型
| 类名 | 作用 |
|---|---|
| QFile | QFile是Qt中用于文件操作的类,直接支持文本文件(可读文本字符)和数据文件(二进制数据)的读写 |
| QFileInfo | 用于读取文件属性信息 |
| QTemporaryFile | 安全创建全局唯一的临时文件,用于大数据传递或进程间通信 |
| QTextStream | 写入的数据全部转化为可读文本 |
| QDataStream | 写入的数据根据类型转换为二进制 |
| QBuffer | 缓冲区的本质为一段连续的存储空间,QBuffer是Qt中缓冲区相关的类 |
| QDir | 是Qt中功能强大的目录操作类 |
| QFileSystemWatcher | 用于监控文件和目录的状态变化(内容修改、重命名、删除等) |
QFile类
在Qt中,QFile类主要用于对文件进行读写操作。QFile直接继承自QIODevice,是专门针对文件操作的类,能够支持文本文件和数据文件的读写。
特点
- 能够对文件执行常规的读写操作,例如打开、关闭、读取全部内容(readAll)、按行读取(readLine)、写入数据(write)等。
- 提供了获取文件详细信息的功能,例如文件路径(path)、文件名(fileName)、文件后缀(suffix)、文件大小(size)、创建时间(created)、最后修改时间(lastModified)等(需通过QFileInfo类获取)。
常用方法
- open(打开方式):打开文件
QIODevice::WriteOnly:以只写方式打开,新内容会覆盖原内容。QIODevice::ReadWrite:以读写方式打开,打开时指针在文件头部,内容从文件头开始追加。QIODevice::Append:以追加方式打开,打开时指针在文件尾部,内容从尾部开始追加。
- qint64 write(QByteArray):向文件中写入内容,返回值为写入的字符串长度。
- QByteArray read(qint64):从文件中读取内容,并返回一个QByteArray,参数为需要读取的最大字节数。
- void close():关闭文件。
QBuffer类
QBuffer继承自QIODevice,它为内存缓冲区提供了输入输出操作的功能。
特点
- 缓冲区本质上是一段连续的存储空间,QBuffer将其封装为可进行输入输出操作的对象。
- 可以像操作文件一样对缓冲区进行打开(open)、写入(write)、读取(read)和关闭(close)操作。通常与QByteArray结合使用,将数据存储在内存中进行临时处理或在不同组件之间传递数据。
常用方法
- atEnd():判断是否已到达缓冲区末尾。
- seek(qint64 pos):设置读取位置。
QAbstractSocket类
QAbstractSocket继承自QIODevice,是Qt中所有套接字类(如QTcpSocket、QUdpSocket)的抽象基类。
特点
- 提供了与网络套接字相关的基本功能,例如连接到服务器(connectToHost)、监听端口(listen)、获取套接字状态(state)、获取本地和远程地址(localhost、peerAddress)等。
- 实现了异步的网络通信机制,通过信号槽机制(如connected、disconnected、readyRead等信号)处理网络事件,方便开发者进行网络编程。
常用方法
- error():获取套接字的错误。
- flush():刷新输出缓冲区。
QProcess类
QProcess继承自QIODevice,用于启动外部程序并与之进行交互(例如获取程序输出、向程序输入数据等)。
特点
- 可以启动外部应用程序,并设置程序的启动参数(setArguments)、工作目录(setWorkingDirectory)等。
- 通过信号(如started、finished、readyReadStandardOutput等)和函数(如write、readAllStandardOutput等)与外部程序进行通信,获取程序的执行结果或向程序输入数据。
常用方法
- startDetached():以分离模式启动进程。
- kill():终止进程。
QDir类
QDir继承自QObject,提供了跨平台的目录操作接口,能够处理不同操作系统的目录结构和文件属性的差异。用于操作文件系统中的目录,包括获取目录信息、创建、删除目录,以及遍历目录中的文件和子目录等。
QDir用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问Qt的资源系统。QDir可以使用相对路径或绝对路径指向文件:
- 绝对路径:以目录分隔符开头(在Windows下,可以选择以驱动器规格开头)
- 相对路径:以目录名或文件名开头,并指定相对于当前目录的路径
常用方法
- 构造函数:
QDir(const QString &path = QString()) - 判断路径是否存在:
bool exists() const - 判断是否是文件:
bool isFile() const - 判断是否是文件夹:
bool isDir() const - 获取当前路径:
QString absolutePath() const - 获取文件名:
QString fileName() const - 获取文件目录:
QString dirName() const - 获取文件大小:
qint64 size() const - 获取文件的创建时间:
QDateTime created() const - 获取文件的最后修改时间:
QDateTime lastModified() const - 创建新的目录:
mkdir() - 删除空目录:
rmdir() - 获取目录中的文件和子目录列表:
entryList()
作业
实现一个文本编辑器,需包含以下功能:
- 树状列表:显示工作路径及其子目录与文件结构
- 文本编辑区域:支持多行文本编辑的基础功能
- 文件操作选项:
- 保存文件
- 打开单个文件
- 打开整个文件夹(在树状列表中显示目录结构)
