Qt:QTextStream
0、说明
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
1、模块和加载项
| Header: | #include <QTextStream> |
| qmake: | QT += core |
2、构造
| 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() |
3、静态字段
| 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 } | 当前文本流的状态 |
6、实例方法
返回值类型 |
方法 |
说明 |
| bool | atEnd() | 如果QTextStream中没有更多数据可读,返回true |
| bool | autoDetectUnicode() | 如果允许自动监测Unicode则返回true |
| QTextCodec * | codec() | 编解码器 |
| QIODevice * | device() | Device |
| QTextStream::FieldAlignment | fieldAlignment() | 对齐方式 |
| int | fieldWidth() | 文本宽度 |
| void | flush() | 刷新所有等待写入Device的buffer中的数据 |
| bool | generateByteOrderMark() | 当采用UTF编码器时,如果QTextStream被设置为生成UTC BOM时返回true |
| int | integerBase() | 当前进制 |
| QLocale | locale() | |
| QTextStream::NumberFlags | numberFlags() | number flags |
| QChar | padChar() | 填充字符 |
| qint64 | pos() | 当前位置 |
| QString | read(qint64 maxlen) | 读取至多maxlen个字符 |
| QString | readAll() | 读取全部 |
| QString | readLine(qint64 maxlen = 0) | 读一行,至多maxlen |
| bool | readLineInto(QString *line, qint64 maxlen = 0) | 读一行到line中,至多maxlen |
| QTextStream::RealNumberNotation | realNumberNotation() | 数字标识 |
| int | realNumberPrecision() | 数字精度 |
| void | reset() | 重置格式选项 |
| void | resetStatus() | 重置状态 |
| bool | seek(qint64 pos) | 跳转到Pos处 |
| void |
setAutoDetectUnicode(bool enabled) |
设置是否自动检测编码 |
|
setCodec(QTextCodec *codec) setCodec(const char *codecName) |
设置编解码器 | |
| setDevice(QIODevice *device) | 设置Device | |
| setFieldAlignment(QTextStream::FieldAlignment mode) | 对齐方式 | |
| setFieldWidth(int width) | 文本宽度 | |
| setGenerateByteOrderMark(bool generate) | ||
| setIntegerBase(int base) | 进制 | |
| setLocale(QLocale locale) | ||
| setNumberFlags(QTextStream::NumberFlags flags) | number flag | |
| setPadChar(QChar ch) | 填充字段 | |
| setRealNumberNotation(QTextStream::RealNumberNotation notation) | 数字标识 | |
| setRealNumberPrecision(int precision) | 数字精度 | |
| setStatus(QTextStream::Status status) | 状态 | |
| setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite) | 为string设置当前字符串 | |
| void | skipWhiteSpace() | 跳过开头的空格字符,之后读取全部 |
| QTextStream::Status | status() | 状态 |
| QString * | string() | QTextStream的string |
| QTextStream & | operator<<(T t) | 写入t到stream中,T可以是任何常见Qt、C格式 |
| QTextStream & | operator>>(T &t) | 从stream中读取一个T存入t中 |
Qt:QTextStream的更多相关文章
- Qt:禁止qDebug的输出
Qt:禁止qDebug的输出 在工程的.pro文件里加上以下编译批令即可: DEFINES += QT_NO_DEBUG_OUTPUT
- Qt:使用自定义的字体
Qt:使用自定义的字体 1. 下载字体文件 2. 加载字体文件 3. 使用字体 QFontDatabase::addApplicationFont("XENOTRON.TTF" ...
- Qt:QJsonObject
0.说明 QJsonObject在逻辑上就是一个Map或Dict!记住这一点对理解它的方法.说明很有帮助. QJsonObject类封装了JSON Object. JSON Object是一个Key- ...
- Qt:QJsonValue
0.说明 QJsonValue类用于操作JSON中的各种数据. JSON是用于存储结构化数据的格式,JSON中的数据可以是六种类型: 基本类型 存储类型 bool QJsonValue::Bool d ...
- Qt:QJsonArray
0.说明 QJsonArray中存储了一系列的QJsonValue.可以向其中插入.删除QJsonValue. 一个QJsonArray可以与QVariantList互相转换.可以通过size()访问 ...
- Qt:QUrl构造时的qrc前缀
参考(按对我帮助从大到小排列): Qt内的各种路径(让人迷惑) - 鬼谷子com - 博客园 qt webengineview 加载本地资源方式 - beautifulday - 博客园 (17条消息 ...
- Qt:QFile、QIODevice
QFile 0.说明 QFile是读写文件的类,这里的文件包括文本文件.二进制文件.资源文件. 通常情况下,文件读写使用QFile.QTextStream.QDataStream就够了. file n ...
- Qt:正则表达式语法:
正则表达式是验证输入.从输入中提取数据以及对输入进行搜索和替换的强大工具,所谓正则表达式,regexp是一种利用模式匹配语言来描述字符串组成限制条件的方式; Qt 提供了一个Q ...
- Qt:QT右键菜单
Qt QTableView 上加右键弹出菜单, 并复制选中的单元格内容到剪贴板中 http://wenku.baidu.com/view/c51cfb63cf84b9d528ea7a29.html h ...
随机推荐
- backup archivelog all not backed up
backup archivelog all not backed up;这条命令可以用来备份没有备份过的归档日志,同时不会备份已经备份过的归档日志.下面是具体用法.第一次备份归档日志 RMAN> ...
- 寻找写代码感觉(十六)之 集成Validation做参数校验
写在前面 今天是大年初五了... 不知不觉,又要上班了,美好的假期只剩一天了,有点不舍呢! 也不知道为什么,总感觉像在做梦一样,像没睡醒一样,并不是因为眼睛小,更多应该是自寻烦恼,想得多罢了. 参数校 ...
- 用Json给表单赋值
$.extend({ setForm :function(frm,jsonValue) { var obj=$(frm); $.each(jsonValue, function (name, ival ...
- 鸿蒙轻内核源码分析:文件系统LittleFS
摘要:本文先介绍下LFS文件系统结构体的结构体和全局变量,然后分析下LFS文件操作接口. 本文分享自华为云社区<# 鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS>,作者: ...
- PHP 取整
转载请注明来源:https://www.cnblogs.com/hookjc/ 对于功能强大的PHP语言来说,能掌握到它的函数用法,一般都能灵活的编写各种需求的PHP程序.我们经常用到的PHP取整函数 ...
- k8s实战之部署Prometheus+Grafana可视化监控告警平台
写在前面 之前部署web网站的时候,架构图中有一环节是监控部分,并且搭建一套有效的监控平台对于运维来说非常之重要,只有这样才能更有效率的保证我们的服务器和服务的稳定运行,常见的开源监控软件有好几种,如 ...
- Linux-一次执行多个命令 ; && ||
一次执行多个命令,多个命令之间用:号隔开 cmd1;cmd2:cmd3 这样前后执行的时候没有依赖性,如果有下列要求呢 1. cmd1执行失败那就不要执行后面的命令 2. cmd1失败了才去指令后面的 ...
- FileInputStream 类与 FileReader 类的区别
FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileIn ...
- 数据分析之客户价值模型(RFM)技术总结
作者 | leo 管理学中有一个重要概念那就是客户关系管理(CRM),它核心目的就是为了提高企业的核心竞争力,通过提高企业与客户间的交互,优化客户管理方式,从而实现吸引新客户.保留老客户以及将已有客户 ...
- Solution -「ARC 110E」Shorten ABC
\(\mathcal{Description}\) Link. 给定长度为 \(n\),包含 A, B, C 三种字符的字符串 \(S\),定义一次操作为将其中相邻两个不相同的字符替换为字符集 ...