QTextStream(文本流)

QTextStream

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::Status(状态)

QTextStream::Ok文本流运行正常
QTextStream::ReadPastEnd文本流已读取基础设备中的数据末尾
QTextStream::ReadCorruptData文本流已读取损坏的数据
QTextStream::WriteFailed文本流无法写入基础设备

和标准C++库一样,QTextStream 也定义了几个全局操纵器函数:<iostream>

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)

以下为功能的使用:

1.写入数据

写入字符串

    QString str;
    QTextStream stream(&str);
    stream<<"123456";//写入字符串
    qDebug()<<str;

写入文件,初始状态:

​​

    QFile file("D:/Qt_text/456.txt");
    if(file.open(QIODevice::WriteOnly|QIODevice::Append))//追加
    {
        QTextStream stream(&file);
        stream<<"123456";//写入文件
    }
    file.close();//关闭文件

​​

 2.读取数据

读取字符串数据

    QString str("123/n456/n789");
    QTextStream stream(&str);
    qDebug()<<stream.read(1);//读取一个字符
    stream.seek(0);//把位置挪到初始位置
    qDebug()<<stream.readLine();//读取一行字符
    stream.seek(0);//把位置挪到初始位置
    qDebug()<<stream.readAll();//读取全部字符
    stream.seek(0);//把位置挪到初始位置
    QString string;
    stream.readLineInto(&string);//读取一行字符到string
    qDebug()<<string;

    //使用流读取
    QString s;
    stream>>s;//把数据读取到s中
    qDebug()<<s;
    

 读取文件数据

    QFile file("D:/Qt_text/456.txt");
    QTextStream stream(&file);
    if(file.open(QIODevice::ReadOnly|QIODevice::Text))//读取数据
    {
        qDebug()<<stream.read(1);//读取一个字符
        stream.seek(0);
        qDebug()<<stream.readLine();//读取一行字符
        stream.seek(0);
        qDebug()<<stream.readAll();//读取全部字符
        stream.seek(0);       
        //使用流读取数据,读取一行
        QString string;
        stream>>string
        qDebug()string
    }
    file.close();//关闭文件

 3.设置显示的格式

设置对齐方式、宽度和填充字符

    //1.使用函数设置
    stream.setFieldAlignment(QTextStream::AlignRight);//设置右对齐
    stream.setFieldWidth(10);//设置字符宽度
    stream.setPadChar('*');//使用*填充  默认使用空格填充
    stream<<123<<456;//在流中添加数据
    qDebug()<<stream.readAll();

    //2.可以在流中设置
    stream<<qSetFieldWidth(10)<<left<<123<<456;//在流中添加数据
    qDebug()<<stream.readAll();

 

设置精度

    stream.setRealNumberPrecision(10);
    float a=12.12;
    stream<<a;
    qDebug()<<stream.readAll();

设置数字表示方法

    QString str;
    QTextStream stream(&str);
    float a=123.456;
    stream.setRealNumberNotation(QTextStream::ScientificNotation);//科学计数法%e
    stream<<a;//添加数据
    qDebug()<<stream.readAll();
    stream.setRealNumberNotation(QTextStream::FixedNotation);//定点表示法%f
    stream<<a;//添加数据
    qDebug()<<stream.readAll();
    stream.setRealNumberNotation(QTextStream::SmartNotation);//科学或定点表示法%g
    stream<<a;//添加数据
    qDebug()<<stream.readAll();

 设置进制数

注意:如果不设置的话,QTextStream会自动检测基数,比如0x开头的会自动检测为十六进制数,1-9开头的自动检测为十进制数。可以通过主动设置来关闭自动检测

    QString str;
    QTextStream stream(&str);
    int a=80;
    //使用函数设置
    stream.setIntegerBase(2);//二进制
    stream<<a;
    qDebug()<<stream.readLine();
    stream.setIntegerBase(8);//八进制
    stream<<a;
    qDebug()<<stream.readLine();
    stream.setIntegerBase(16);//十六进制
    stream<<a;
    qDebug()<<stream.readLine();
    //使用c++的方式
    stream<<bin<<a;//二进制
    qDebug()<<stream.readLine();
    stream<<oct<<a;//八进制
    qDebug()<<stream.readLine();
    stream<<hex<<a;//十六进制
    qDebug()<<stream.readLine();

设置数字标志 (这里只列举两种)

    QString str;
    QTextStream stream(&str);
    int a=80;
    
    //显示前缀
    stream.setNumberFlags(QTextStream::QTextStream::ShowBase);
    stream<<bin<<a;//二进制
    qDebug()<<stream.readLine();
    stream<<oct<<a;//八进制
    qDebug()<<stream.readLine();
    stream<<hex<<a;//十六进制
    qDebug()<<stream.readLine();
    qDebug()<<tr("---------------------------");
    
    //显示前缀的大写版本
    stream.setNumberFlags(QTextStream::QTextStream::UppercaseBase|QTextStream::QTextStream::ShowBase);
    stream<<bin<<a;//二进制
    qDebug()<<stream.readLine();
    stream<<oct<<a;//八进制
    qDebug()<<stream.readLine();
    stream<<hex<<a;//十六进制
    qDebug()<<stream.readLine();

    QString str;
    QTextStream stream(&str);
    //显示小数点
    float f=10;
    float f1=10.222222;
    stream.setNumberFlags(QTextStream::ForcePoint);//无论怎样都会显示小数点
    stream<<f;
    qDebug()<<stream.readAll();
    stream<<f;
    qDebug()<<stream.readAll();

  • 6
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值