文本流和数据流
使用文本流读写文本文件
QTextStream
是 Qt 中用于文本输入输出的类,它可以用于读取和写入文本数据到各种数据源,如文件、套接字等。下面是 QTextStream
中几个常用的成员函数:
常用成员函数
QTextStream(QIODevice \*device)
: 构造函数,用于创建一个QTextStream
对象,并将其与指定的QIODevice
关联起来。
cppCopy Code#include <QFile>
#include <QTextStream>
int main() {
QFile file("file.txt");
if (!file.open(QIODevice::ReadWrite)) {
return 1;
}
QTextStream stream(&file);
// 使用 stream 进行读写操作
stream << "Hello, QTextStream!";
file.close();
return 0;
}
在这个例子中,通过将 QFile
对象传递给 QTextStream
的构造函数,创建了一个与文件 “file.txt” 关联的 QTextStream
对象。
QString readAll()
: 读取所有剩余的文本数据,并返回一个包含这些数据的字符串。
cppCopy Code#include <QFile>
#include <QTextStream>
#include <QDebug>
int main() {
QFile file("file.txt");
if (!file.open(QIODevice::ReadOnly)) {
return 1;
}
QTextStream stream(&file);
QString contents = stream.readAll();
qDebug() << "File contents:" << contents;
file.close();
return 0;
}
在这个例子中,readAll
函数用于读取文件 “file.txt” 中的所有文本数据,并将其保存到一个字符串中。
void setFieldWidth(int width)
和int fieldWidth() const
:setFieldWidth
函数用于设置字段宽度,即输出时每个字段的宽度。fieldWidth
函数用于获取当前的字段宽度。
cppCopy Code#include <QFile>
#include <QTextStream>
#include <QDebug>
int main() {
QFile file("file.txt");
if (!file.open(QIODevice::ReadOnly)) {
return 1;
}
QTextStream stream(&file);
stream.setFieldWidth(10);
QString word;
while (!stream.atEnd()) {
stream >> word;
qDebug() << "Word:" << word;
}
file.close();
return 0;
}
在这个例子中,通过 setFieldWidth
设置了字段宽度为 10,在读取文件中的单词时,每个单词将按照 10 个字符的宽度进行输出。
通过以上几个常用的成员函数,可以实现对文本数据的输入输出,并且可以对输出的格式进行一定的控制。
使用数据流读写二进制数据
QDataStream类实现了C ++的基本数据类型(如,,,等)的序列化。更复杂数据的序列化是通过将数据分解为基本单元来完成的。char short int char *
范例 (把二进制数据写入流):
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); // we will serialize the data into the file
out << QString("the answer is"); // serialize a string
out << (qint32)42; // serialize an integer
范例 (读取二进制数据从流):
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a; // extract "the answer is" and 42
常用成员函数
- operator<<:用于将数据写入数据流中。例如,可以使用该函数将整数、字符串等数据写入到数据流中。
- operator>>:用于从数据流中读取数据。例如,可以使用该函数从数据流中读取整数、字符串等数据。
- setVersion:设置数据流的版本号。版本号可以影响数据的序列化和反序列化过程。
- setByteOrder:设置数据流的字节顺序。可以选择设置为大端字节顺序或小端字节顺序。
- setStatus:获取数据流的状态,例如是否出现错误或是否已到达流的末尾。
- atEnd:检查是否已到达数据流的末尾。
- device:返回与数据流关联的设备指针,可以用于设置或更改I/O设备。