QTextStream 类为读取和写入文本提供了一个方便的接口可以在QIODevice、QBateArray、和QString中使用,QTextStream使用的是流运算符(>> <<),可以更方便的读/写数据,QTextStream也支持对字段进行格式的选项支持。
构造函数:
QTextStream stream("aaaaaaaaaaaaa");//读取字符串QFile file("D:/Qt_text/456.txt");QTextStream stream1(&file);//读取文件
常用函数 :
read() | 读取数据,作为QString返回 |
readLine() | 读取一行数据,作为QString返回 |
readAll() | 读取全部数据,作为QString返回 |
readLineInto(QString*line ,qin64) | 将读取的一行数据存放到lime中(Qt 5.5中引入) |
pos() | 获取当前流的位置 |
seek() | 调整流的位置 |
flush() | 刷新 |
reset() | 格式化选项 |
resetStates() | 格式化状态 |
setAutoDetectUnicode(bool) | 如果启用为 true,QTextStream将尝试通过查看流数据来检测 Unicode 编码 |
setCodec() | 设置流的编解码器,编解码器用于解码从分配的设备读取的任何数据,以及编码写入的任何数据 |
setDevice() | 设置设备 |
setFieldAlignment() | 设置字段对齐方式 |
setFieldWidth() | 设置字段宽度 |
setIntegerBase() | 设置数字的进制数,默认为10 |
setNumberFlags() | 设置数字标志 |
setPadChar() | 设置填充字符 |
setRealNumberNotation() | 设置数字表示方法(智能记数法、固定记数法、科学计数法) |
setRealNumberPrecision() | 设置精度 |
setStatus() | 设置流的状态 |
setString() | 设置字符串 |
skipWhiteSpace() | 从流中读取和丢弃空格,直到检测到非空格字符,或者直到atEnd() |
>>(object) | 读取流中的数据到object |
<<(data) | 输入数据data到流中 |
qSetFieldWidth(intwidth) | 相当于setFieldWidth() |
qSetPadChar(QChar ch) | 相当于setPadChar() |
qSetRealNumberPrecision(intprecision) | 相当于setRealNumberPrecision() |
QTextStream::FieldAlignment(对齐方式)
QTextStream::AlignLeft | 在字段右侧填充 |
QTextStream::AlignRight | 在字段左侧填充 |
QTextStream::AlignCenter | 垫在场地的两侧 |
QTextStream::AlignAccountingStyle | 与右对齐相同,只是数字的符号是左齐平的 |
QTextStream::NumberFlags(数字标志)
QTextStream::ShowBase | 如果基数为 16 (“0x”)、8 (“0”) 或 2 (“0b”),则将基数显示为前缀 |
QTextStream::ForcePoint | 始终将小数点分隔符放在数字中,即使没有小数 |
QTextStream::ForceSign | 始终将符号放入数字中,即使是正数 |
QTextStream::UppercaseBase | 使用基本前缀的大写版本(“0X”、“0B”) |
QTextStream::UppercaseDigits | 使用大写字母表示数字 10 到 35,而不是小写 |
QTextStream::RealNumberNotation(数字表示方法)
QTextStream::ScientificNotation | 科学记数法,printf() %e |
QTextStream::FixedNotation | 定点表示法,printf() %f |
QTextStream::SmartNotation | 科学或定点符号,printf() %g |
QTextStream::Ok | 文本流运行正常 |
QTextStream::ReadPastEnd | 文本流已读取基础设备中的数据末尾 |
QTextStream::ReadCorruptData | 文本流已读取损坏的数据 |
QTextStream::WriteFailed | 文本流无法写入基础设备 |
和标准C++库一样,QTextStream 也定义了几个全局操纵器函数:
Qt::bin | 二进制 |
Qt::oct | 八进制 |
Qt::dec | 十进制 |
Qt::hex | 十六进制 |
Qt::showbase | 如果基数为 16 (“0x”)、8 (“0”) 或 2 (“0b”),则将基数显示为前缀 |
Qt::forcesign | 始终将符号放入数字中,即使是正数 |
Qt::forcepoint | 始终将小数点分隔符放在数字中,即使没有小数 |
Qt::noshowbase | 不显示前缀 |
Qt::noforcesign | 不显示符号 |
Qt::noforcepoint | 不显示小数点 |
Qt::uppercasebase | 大写前缀 |
Qt::uppercasedigits | 大写表示 |
Qt::lowercasebase | 小写前缀 |
Qt::lowercasedigits | 小写表示 |
Qt::fixed | 定点表示法 |
Qt::scientific | 科学计数法 |
Qt::left | 左对齐 |
Qt::rignt | 右对齐 |
Qt::center | 居中 |
Qt::endl | 换行 |
Qt::flush | 刷新 |
Qt::reset | 重置 |
Qt::ws | 跳过空格 |
Qt::bom | 相当于setGenerateByteOrderMark(true) |
写入字符串
QString str;QTextStream stream(&str);stream<<"123456";//写入字符串qDebug()<
写入文件,初始状态:
QFile file("D:/Qt_text/456.txt");if(file.open(QIODevice::WriteOnly|QIODevice::Append))//追加{QTextStream stream(&file);stream<<"123456";//写入文件}file.close();//关闭文件
读取字符串数据
QString str("123/n456/n789");QTextStream stream(&str);qDebug()<>s;//把数据读取到s中qDebug()<
读取文件数据
QFile file("D:/Qt_text/456.txt");QTextStream stream(&file);if(file.open(QIODevice::ReadOnly|QIODevice::Text))//读取数据{qDebug()<>stringqDebug()string}file.close();//关闭文件
设置对齐方式、宽度和填充字符
//1.使用函数设置stream.setFieldAlignment(QTextStream::AlignRight);//设置右对齐stream.setFieldWidth(10);//设置字符宽度stream.setPadChar('*');//使用*填充 默认使用空格填充stream<<123<<456;//在流中添加数据qDebug()<
设置精度
stream.setRealNumberPrecision(10);float a=12.12;stream<
设置数字表示方法
QString str;QTextStream stream(&str);float a=123.456;stream.setRealNumberNotation(QTextStream::ScientificNotation);//科学计数法%estream<
设置进制数
注意:如果不设置的话,QTextStream会自动检测基数,比如0x开头的会自动检测为十六进制数,1-9开头的自动检测为十进制数。可以通过主动设置来关闭自动检测
QString str;QTextStream stream(&str);int a=80;//使用函数设置stream.setIntegerBase(2);//二进制stream<
设置数字标志 (这里只列举两种)
QString str;QTextStream stream(&str);int a=80;//显示前缀stream.setNumberFlags(QTextStream::QTextStream::ShowBase);stream<
QString str;QTextStream stream(&str);//显示小数点float f=10;float f1=10.222222;stream.setNumberFlags(QTextStream::ForcePoint);//无论怎样都会显示小数点stream<