QTextStream文本流

注意:

1、QDataStream 、QTextStream 二者区别:
(1)QTextStream 类:用于对数据进行文本格式的读/写操作,可在 QString、QIODevice或 QByteArray 上运行,比如把数据输出到 QStringQIODevice QByteArray 对象上,或进行相反的操作。
(2)QDataStream 类:用于对数据进行二进制格式的读/写操作,QDataStream 只可在QIODeviceQByteArray 上运行,因为 QString 只存放字符数据。

2、 QIODevice 类是 Qt 中所有 I/O 设备的基础接口类(这是一个抽象类),也就是说 QIODevice
及其子类描述的是 I/O 设备,该类为支持读/写数据块的设备提供了通用实现和抽象接口,
比如 QFile、 QBuffer、 QTcpSocket 等。


3、 QIODevice 把设备分为两类:随机存储设备和顺序存储设备
①、随机存储设备:可定位到任意位置(使用 seek()函数),随机存储设备有 QFile
QTemporaryFile, QBuffer
②、顺序存储设备:不支持任意的位置存储,顺序存储设备有 QProcess、 QTcpSocket
QUdpSocket 和 QSslSocket;
 

篇一、QTextStream(文本流)-CSDN博客

QTextStream 类为读取和写入文本提供了一个方便的接口可以在QIODevice、QBateArray、和QString中使用,QTextStream使用的是流运算符(>> <<),可以更方便的读/写数据,QTextStream也支持对字段进行格式的选项支持。

1、所有构造函数
1)、 
QTextStream();
QTextStream(QIODevice *device); //构造一个在IO设备 device 上运行的 QTextStream。比如:QFile\QTcpSocket等均为IOdevice

2)、 QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
此函数用于在控制台进行输入输出, 详见示例

示例:在控制台输入输出数据
使用控制台需要在 pro 文件中添加 CONFIG +=console 语句,并建议使用 MinGW 编译器运行 Qt 程序
#include<QtWidgets>
int main(int argc, char *argv[])
{
    QString s;
    QTextStream in(stdin, QIODevice::ReadOnly); //以只读模式从控制台输入内容到 s
    in.setCodec("GB18030"); //若要存储中文需使用此编码
    in >>s; //把控制台输入的内容赋给 s
    QTextStream out(stdout, QIODevice::WriteOnly);
    out<<s;  
} //把 s 的内容输出到控制台

3)、 QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
构造一个在字符串 string 上运行的 QTextStream,打开模式由 openMode 指定。

4)、 QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
构造一个在 array 上运行的 QTextStream,在内部 array 会由 QBuffer 包装。

5)、 QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
用户在控制台输入的内容
在控制台输出的内容构造一个在 array 上运行的 QTextStream,无论 openMode 的值如何, array 都以只读方
式访问。

常用构造函数: 

    QTextStream stream("aaaaaaaaaaaaa");//读取字符串
    QFile file("D:/Qt_text/456.txt");
    QTextStream stream1(&file);//读取文件


2、常用函数 :

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 流读取文件的内容

#include<QtWidgets>
int main(int argc, char *argv[])
{ 
	//QApplication aa(argc,argv);
	QFile f("F:/1.txt");
	f.open(QIODevice::ReadOnly);//f以只读\写的方式打开,后面才能使用文本流QTextStream读\写。否则,会读/写失败
	QTextStream in(&f); in.setCodec("GB18030");
	QChar c;
	//1、“逐字符”读取的方法
	in >>c; //从 1.txt 读取第一个字符
	qDebug()<<c; //输出\u4e2d(这是“中”字的 Unicode 编码)
	in >>c; //继续读取第 2 个字符
	qDebug()<<c; //输出\u6587(这是“文”字的 Unicode 编码)
	
	//2、一个单词接一个单词的读取
	in.seek(0); //把位置设置为 0,以便从头开始读取
	QString s;
	in >>s; //读取一个单词到 s 中(单词由空格分开),
	qDebug()<<s; //输出“中文示例 0”。
	in >>s; //继续读取下一个单词到 s 中,
	qDebug()<< s; /*输出“aaa1”。 >>运算符会自动跳过前导空格,所以读取到的单词前面没有空白符*/
	
	//3、读取“指定个数的字符” 
	in.skipWhiteSpace(); //跳过空白。
	s= in.read(10); //继续读取 10 个字符,并把读取到的字符保存到 s 中
	qDebug()<<s; //输出“aaa2 中文示例 1”
	
	//4、 “逐行”读取
	s= in.readLine(); //继续读取余下的整行文本,并把结果保存到 s 中
	qDebug()<<s; /*输出“ aaaa3 aaaa4 中文示例 2 12389 83”,注意:因为为跳过空
	白,所以最前面有一个空白字符*/
	in.seek(0); //重置位置
	s= in.readLine(30); /*读取30个字符或整行(本行大于30个字符,因此只读取30个字符),并把结果保存到 s 中*/
	qDebug()<<s; //输出"中文示例 0 aaa1 aaa2 中文示例 1 aaaa3 aa"
	
	//5、读取整个文本
	in.seek(0);
	s= in.readAll();
	qDebug()<<s; 
	/*输出"中文示例 0 aaa1 aaa2 中文示例 1 aaaa3 aaaa4 中文示例 2 12389
	83\r\nbbb1 bbb2 中文示例 3 bbbb3 bbbb4 中文示例 4 12389 83\r\nccc1
	ccc2 中文示例 5 cccc3 cccc4 中文示例 6 12389 83\r\n",由输出可见,
	readAll()函数包含了行尾符"\r\n"*/
	
	//6、使用循环“逐行读取”整个文件。
	while(!in.atEnd()) s+= in.readLine();
	qDebug()<< s;
}

篇二、

下面是 QTextStream 的一些常用方法:

1、 构造函数

QTextStream 可以通过构造函数来指定输入或输出设备,例如:

    //cpp
    QFile file("example.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;
     
    QTextStream in(&file); // 从文件读取文本

2. 读取操作

QTextStream 有许多读取操作,可以读取单个字符、单词、一行等,例如:

    //cpp
    QChar c = in.read(); // 读取单个字符
    QString word = in.readWord(); // 读取一个单词
    QString line = in.readLine(); // 读取一行文本

3. 写入操作

QTextStream 也有许多写入操作,可以写入单个字符、字符串、数值等,例如:

    //cpp
    out << "Hello, world!" << endl; // 写入字符串和换行符
    out << 42 << " is the answer." << endl; // 写入数值和字符串

4. 格式化输出

QTextStream 支持格式化输出,例如可以指定输出的精度、宽度、填充字符等,例如:

    //cpp
    out.setFieldWidth(10);
    out.setPadChar('-');
    out.setRealNumberPrecision(4);
    out << 3.14159265358979323846 << endl; // 输出:--3.1416

5. 读写位置控制

QTextStream 可以控制读写位置,可以获取当前读写位置、设置读写位置等,例如:

    //cpp
    int pos = in.pos(); // 获取当前读取位置
    in.seek(0); // 设置读取位置为文件开头

6. 字符编码设置

QTextStream 可以设置字符编码,例如:

    //cpp
    in.setCodec("UTF-8"); // 设置输入流的字符编码为 UTF-8
    out.setCodec("GBK"); // 设置输出流的字符编码为 GBK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值