Qt:QTextStream

1、说明

QTextStream提供了读写文本文件的接口。

QTextStream可以操作QIODevice, QByteArray 和 QString,调用QTextStream的流操作可以方便的读取文字、行、数字等,还提供了文本填充和对齐的相关格式。

例如:

QFile data("output.txt");
if (data.open(QFile::WriteOnly | QFile::Truncate)) {
    QTextStream out(&data);
    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
    // writes "Result: 3.14      2.7       "
}

1)控制台输入输出

QTextStream也常用于控制台输入输出,它可以自动将标准输入解码为正确的格式,例如:

QTextStream stream(stdin);
QString line;
while(stream.readLineInto(&line)){
    ...
}

2)Device、flush与编码

除了用QTextStream构造器外,也可以通过setDevice() 和 setString()设置QTextStream的Device和String。可以用seek()跳转到指定位置,如果没有数据可读,那么atEnd()会返回true。调用flush()后,QTextStream就会把所有数据从转移到device中,并且调用device的flush()。

QTextStream在内部使用Unicode编码,并且使用QTextCodec来支持不同的字符编码。默认情况下,QTextCodec::codecForLocale()是读写时所用的编码,调用setCodec()设置编码。

3)读取文本文件

QTextStream使用三种方式读取文本文件:

  • 一块一块读,readLine() or readAll();
  • 一个字一个字读(即一次读一个字符串):QTextStream支持流入QStrings, QByteArrays 和char *的buffer。字间通过空格分隔。
  • 一个字符一个字符读:流入QChar或char,通常用于文件解析时。

由于QTextStream使用了buffer,所以我们不能用超类对象从流中读取。例如,如果我们有一个QFile对象并直接用QFile::readLine()来读取,而不是通过流,那么TextStream的在文件中位置将会失去同步。

4)格式与数字

默认情况下,当从文本流中读取数字时,QTextStream将会自动解析它的进制。例如,以"0x"开头的数字会被解析为十六进制。而以1-9开头的则会被解析为十进制。我们也可以手动设置进制,从而避免自动检测,方法是setIntegerBase():

QTextStream in("0x50 0x20");
int firstNumber, secondNumber;

in >> firstNumber;             // firstNumber == 80
in >> dec >> secondNumber;     // secondNumber == 0

char ch;
in >> ch;                      // ch == 'x'

QTextStream支持许多有关构造文本的格式选项:

可以通过setFieldWidth() 和 setPadChar()来设置文本宽度和填充字符;

使用setFieldAlignment()来设置每段文本的对齐方式;

对于数字,用setRealNumberNotation() 与 setRealNumberPrecision()设置符号和精度,一些额外的数字格式项通过setNumberFlags()设置。

类似标准C++库<iostream>,QTextStream也定义了一些全局操作符,这使得我们在使用<<与>>时,可以通过这些全局操作符及相关函数进行输出格式上的一些设置:

比如,我们要用十进制和十六进制输出两个值:

QTextStream in("0x50 20");
int firstNumber, secondNumber;

in >> hex >> firstNumber;      // firstNumber == 80
in >> dec >> secondNumber;     // secondNumber == 20

2、模块和加载项

Header:

#include <QTextStream>

qmake:

QT += core

3、构造

QTextStream(QByteArray array, QIODevice::OpenMode openMode = QIODevice::ReadOnly)

QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream(QIODevice *device)

QTextStream()

4、静态字段

enum

FieldAlignment { AlignLeft, AlignRight, AlignCenter, AlignAccountingStyle }

对齐方式

enum

NumberFlag { ShowBase, ForcePoint, ForceSign, UppercaseBase, UppercaseDigits }

整数、float、double数字输出时的显示格式

flags

NumberFlags

enum

RealNumberNotation { ScientificNotation, FixedNotation, SmartNotation }

float、double表示方法

enum

Status { Ok, ReadPastEnd, ReadCorruptData, WriteFailed }

当前文本流的状态

5、实例方法

原文链接:Qt:QTextStream -QT开发中文网

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值