QIODevice类是Qt中所有I/O设备基础接口,QIODevice是抽象类无法实例化。
QIODevice类为QFile,QBuffer和QTcpSocker等提供支持读写数据块的设备提供一个抽象接口。
open(QIODevice::OpenModeFlag) | 打开设备,必须设置打开模式 |
close() | 关闭文件 |
isOpen() | 判断是否打开 |
write() | 写入 |
putChar() | 写入 |
read() | 读取 |
readData() | 读取固定字节数数据 |
readLine() | 读取一行 |
readAll () | 读取全部 |
getChar() | 读取一个字符 |
atEnd() | 是否在文件末尾 |
peek(X) | 查看最多X字节 |
setOpenMode() | 设置打开模式 |
size() | 返回设备大小 |
skip(X) | 跳过X个字节 |
ungetChar() | 撤销getChar操作 |
open(QIODevice::OpenModeFlag)
使用打开方式时,可以使用 | 使用多个打开方式
QIODevice::NotOpen | 设备未打开 |
QIODevice::ReadOnly | 设备已打开以供读取 |
QIODevice::WriteOnly | 设备已打开以进行写入。请注意,对于文件系统子类(例如 QFile),此模式意味着截断,除非与 ReadOnly、Append 或 NewOnly 结合使用。 |
QIODevice::ReadWrite | 设备已打开,可供读取和写入 |
QIODevice::Append | 设备以追加模式打开,以便将所有数据写入文件末尾 |
QIODevice::Truncate | 如果可能,设备在打开之前会被截断。设备的所有早期内容都将丢失 |
QIODevice::Text | 读取时,行尾终止符将转换为“\n”。写入时,行尾终止符将转换为本地编码,例如 Win32 的“\r\n”。 |
QIODevice::Unbuffered | 将绕过设备中的任何缓冲区 |
QIODevice::NewOnly | 文件不存在,创建并打开该文件操作系统保证您是唯一创建和打开文件的人(Qt5.11新加) |
QIODevice::ExistingOnly | 文件存在,此标志必须与只读、只写或读写一起指定。Qt5.11新加) |
常用的信号:
aboutToClose() | 设备关闭 |
byteWrite() | 有数据写入 |
readyRead() | 数据被读取 |
readChannelDone() | 当此设备中的输入(读取)流关闭时 |
QIODevice会区分两种类型设备:随机存储和顺序存储设备:
使用isSequential()来判断设备类型
- 随机存储设备支持seek()函数来定位到任意位置,文件中可以使用pos()函数获取
- QFile
- QBuffer
- 顺序存储设备不支持定位到任意为置,数据必须一次性读取
- QTcpSocket
- QProcess