QTextStream 类为读写文本提供了一个方便的接口。
QTextStream 可以对 QIODevice、QByteArray 或 QString 进行操作。使用 QTextStream 的流式操作符,可以方便地读写单词、行和数字。对于生成文本,QTextStream 支持字段填充和对齐的格式选项,以及数字的格式。
默认情况下,使用 UTF-8 编码读写,也可以通过调用 setEncoding() 来设置编码。
默认情况下,当从文本流中读取数字时,QTextStream 会自动检测数字的基本表示。例如,如果数字以“0x”开头,则假定为十六进制形式。如果它以数字 1-9 开头,则假定为十进制形式,依此类推。可以通过调用 setIntegerBase() 设置整数基数,从而禁用自动检测。
与标准 C++ 库中的
1、enum QTextStream::FieldAlignment:此枚举指定当字段比占据它的文本更宽时如何对齐字段中的文本。
2、enum QTextStream::NumberFlag:此枚举指定可以设置以影响整数、浮点数和双精度数的输出的各种标志。
3、enum QTextStream::RealNumberNotation:此枚举指定用于将浮点数和双精度数表示为字符串的符号。
4、enum QTextStream::Status:此枚举描述了文本流的当前状态。
1、QTextStream(const QByteArray &array, QIODeviceBase::OpenMode openMode = ReadOnly)
QTextStream(QByteArray *array, QIODeviceBase::OpenMode openMode = ReadWrite)
QTextStream(QString *string, QIODeviceBase::OpenMode openMode = ReadWrite)
QTextStream(FILE *fileHandle, QIODeviceBase::OpenMode openMode = ReadWrite)
QTextStream(QIODevice *device)
构造一个对 参数1 进行操作的 QTextStream,使用 openMode 来定义打开模式。
QByteArray ba;
QTextStream in(&ba,QIODeviceBase::WriteOnly);
for (int i = 0; i < 10; ++i)
{
in << i;
}
in.flush();
2、bool atEnd()
是否没有更多数据要从 QTextStream 读取。
3、bool autoDetectUnicode()
是否启用了自动 Unicode 检测,默认启用。
4、QIODevice * device()
返回关联的当前设备。
5、QStringConverter::Encoding encoding()
当前分配给流的编码。
enum QStringConverter::Encoding:
6、QTextStream::FieldAlignment fieldAlignment()
当前字段对齐方式。
7、int fieldWidth() / void setFieldWidth(int width)
字段宽度。如果宽度为 0(默认值),则字段宽度等于生成文本的长度。
字段宽度适用于在调用此函数后附加到此流的每个元素。
8、void flush()
刷新任何等待写入设备的缓冲数据。
如果 QTextStream 是对字符串进行操作,则此函数不执行任何操作。
9、bool generateByteOrderMark()
是否设置为在使用 UTF 编码时生成 UTF BOM(字节顺序标记)。默认为 false。
10、void setIntegerBase(int base) / int integerBase()
设置整数的基数。基数用于读取和生成数字。
基数可以是 2(二进制)、8(八进制)、10(十进制)或 16(十六进制)。
如果 base 为 0,QTextStream 将尝试通过检查流上的数据来检测 base。生成数字时,QTextStream 默认假定基数为 10。
11、QLocale locale()
语言环境。
12、QTextStream::NumberFlags numberFlags()
当前数字标志。
13、QChar padChar() / void setPadChar(QChar ch)
填充字符。默认值为 ASCII 空格字符 (' ') 或 QChar(0x20)。
该字符用于在生成文本时填充字段中的空格。
14、qint64 pos()
返回与流的当前位置对应的设备位置,如果发生错误(没有设备或字符串,或者有设备错误),则返回 -1。
此操作可能很昂贵,因此应该避免在循环中调用此函数。
15、QString read(qint64 maxlen)
从流中读取最多 maxlen 个字符,并将读取的数据作为 QString 返回。
16、QString readAll()
读取流的全部内容,并将其作为 QString 返回。在处理大文件时避免使用此功能,因为它会消耗大量内存。
如果不知道有多少数据可用,则调用 readLine() 会更好。
17、QString readLine(qint64 maxlen = 0)
从流中读取一行文本,并将其作为 QString 返回。
允许的最大行长度设置为 maxlen。如果流包含比这更长的行,则这些行将在 maxlen 个字符之后拆分并部分返回。
如果 maxlen 为 0,则行可以是任意长度。
返回的行没有尾随的行尾字符(“\n”或“\r\n”),因此可能不需要调用 QString::trimmed()。
如果流已读到文件末尾,readLine() 将返回一个空 QString。对于字符串或支持它的设备,可以使用 atEnd() 显式测试流的结尾。
18、bool readLineInto(QString *line, qint64 maxlen = 0)
从流中读取一行文本到 line 中。如果 line 为 nullptr,则不存储读取的行。
允许的最大行长度设置为 maxlen。 如果流包含比这更长的行,则这些行将在 maxlen 个字符之后拆分并部分返回。
如果 maxlen 为 0,则行可以是任意长度。
结果行没有尾随的行尾字符(“\n”或“\r\n”),因此可能不需要调用 QString::trimmed()。
如果 line 有足够的容量容纳即将被读取的数据,这个函数可能不需要分配新的内存。 因此,它可以比 readLine() 更快。
如果流已读取到文件末尾或发生错误,则返回 false,否则返回 true。 在任何情况下,调用前 line 的内容都会被丢弃。
19、void reset()
重置 QTextStream 的格式化选项,使其恢复到原来的构造状态。设备、字符串和任何缓冲数据保持不变。
20、void resetStatus()
重置文本流的状态。
21、bool seek(qint64 pos)
寻找设备中的位置 pos。返回是否查询成功。
22、void setAutoDetectUnicode(bool enabled)
如果 enabled 为 true,QTextStream 将尝试通过查看流数据来检测 Unicode 编码,以查看它是否可以找到 UTF-8、UTF-16 或 UTF-32 字节顺序标记 (BOM)。 如果找到这个标记,QTextStream 会将当前编码替换为 UTF 编码。
该函数可以与 setEncoding() 一起使用。 通常将编码设置为 UTF-8,然后启用 UTF-16 检测。
23、void setGenerateByteOrderMark(bool generate)
如果 generate 为 true 并且使用了 UTF 编码,QTextStream 将在任何数据写入设备之前插入 BOM(字节顺序标记)。必须在写入任何数据之前调用此函数。
24、void setRealNumberPrecision(int precision)
设置在生成实数时应该写入的小数位数的精度。精度不能为负值。默认为 6。
25、void setString(QString *string, QIODeviceBase::OpenMode openMode = ReadWrite)
QString * string()
使用 openMode 设置字符串。如果 QTextStream 已经被分配了一个设备,则将在替换之前调用flush()。
26、void skipWhiteSpace()
从流中读取并丢弃空白字符,直到检测到非空格字符,或者直到 atEnd() 返回 true。此函数在逐字符读取流时很有用。
空白字符是 QChar::isSpace() 返回 true 的所有字符。
QString ba;
QTextStream in(&ba,QIODeviceBase::ReadWrite);
in << ' ';
for (int i = 1; i < 10; ++i)
{
in << i;
in << ' ';
}
in.flush();
qDebug()<
27、operator>>
QTextStream & operator>>(QChar &c)
QTextStream & operator>>(char &c)
从流中读取一个字符并将其存储在 c 中。
返回对 QTextStream 的引用,因此可以嵌套多个运算符。不跳过空格。
QTextStream in(file);
QChar ch1, ch2, ch3;
in >> ch1 >> ch2 >> ch3;
QTextStream & operator>>(short &i)
... 多个整数类型参数的重载 ...
从流中读取一个整数并将其存储在 i 中,然后返回对 QTextStream 的引用。数字在存储之前被转换为正确的类型。 如果在流中未检测到数字,则将 i 设置为 0。
默认情况下,QTextStream 将尝试使用以下规则检测数字的基数:
- “0b”或“0B”:二进制
- “0”后跟“0-7”:八进制
- "0":十进制
- “0x”或“0X”:十六进制
- “1”到“9”:十进制
QTextStream & operator>>(float &f)
QTextStream & operator>>(double &f)
从流中读取一个实数并将其存储在 f 中,然后返回对 QTextStream 的引用。该数字被转换为正确的类型。如果在流上没有检测到实数,则 f 设置为 0.0。
作为一个特殊的例外,QTextStream 允许字符串“nan”和“inf”表示 NAN 和 INF 浮点数或双精度数。
QTextStream & operator>>(QString &str)
从流中读取一个单词并将其存储在 str 中,然后返回对流的引用。单词由空格分隔(即 QChar::isSpace() 返回 true 的所有字符)。前导空格被跳过。
QTextStream & operator>>(QByteArray &array)
将单词转换为 UTF-8,然后将其存储在数组中。
QTextStream & operator>>(char *c)
将单词转换为 UTF-8 并将其存储在 c 中,以 '\0' 字符结尾。如果没有可用的单词,则仅存储“\0”字符。尽可能改用 QByteArray 参数的重载版本。