• QTextStream(文本流)


    QTextStream

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

    构造函数: 

    1. QTextStream stream("aaaaaaaaaaaaa");//读取字符串
    2. QFile file("D:/Qt_text/456.txt");
    3. 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 也定义了几个全局操纵器函数:

    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.写入数据

    写入字符串

    1. QString str;
    2. QTextStream stream(&str);
    3. stream<<"123456";//写入字符串
    4. qDebug()<<str;

    写入文件,初始状态:

    ​​

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

    ​​

     2.读取数据

    读取字符串数据

    1. QString str("123/n456/n789");
    2. QTextStream stream(&str);
    3. qDebug()<<stream.read(1);//读取一个字符
    4. stream.seek(0);//把位置挪到初始位置
    5. qDebug()<<stream.readLine();//读取一行字符
    6. stream.seek(0);//把位置挪到初始位置
    7. qDebug()<<stream.readAll();//读取全部字符
    8. stream.seek(0);//把位置挪到初始位置
    9. QString string;
    10. stream.readLineInto(&string);//读取一行字符到string
    11. qDebug()<<string;
    12. //使用流读取
    13. QString s;
    14. stream>>s;//把数据读取到s中
    15. qDebug()<<s;

     读取文件数据

    1. QFile file("D:/Qt_text/456.txt");
    2. QTextStream stream(&file);
    3. if(file.open(QIODevice::ReadOnly|QIODevice::Text))//读取数据
    4. {
    5. qDebug()<<stream.read(1);//读取一个字符
    6. stream.seek(0);
    7. qDebug()<<stream.readLine();//读取一行字符
    8. stream.seek(0);
    9. qDebug()<<stream.readAll();//读取全部字符
    10. stream.seek(0);
    11. //使用流读取数据,读取一行
    12. QString string
    13. stream>>string
    14. qDebug()string
    15. }
    16. file.close();//关闭文件

     3.设置显示的格式

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

    1. //1.使用函数设置
    2. stream.setFieldAlignment(QTextStream::AlignRight);//设置右对齐
    3. stream.setFieldWidth(10);//设置字符宽度
    4. stream.setPadChar('*');//使用*填充 默认使用空格填充
    5. stream<<123<<456;//在流中添加数据
    6. qDebug()<<stream.readAll();
    7. //2.可以在流中设置
    8. stream<<qSetFieldWidth(10)<<left<<123<<456;//在流中添加数据
    9. qDebug()<<stream.readAll();

     

    设置精度

    1. stream.setRealNumberPrecision(10);
    2. float a=12.12;
    3. stream<<a;
    4. qDebug()<<stream.readAll();

    设置数字表示方法

    1. QString str;
    2. QTextStream stream(&str);
    3. float a=123.456;
    4. stream.setRealNumberNotation(QTextStream::ScientificNotation);//科学计数法%e
    5. stream<<a;//添加数据
    6. qDebug()<<stream.readAll();
    7. stream.setRealNumberNotation(QTextStream::FixedNotation);//定点表示法%f
    8. stream<<a;//添加数据
    9. qDebug()<<stream.readAll();
    10. stream.setRealNumberNotation(QTextStream::SmartNotation);//科学或定点表示法%g
    11. stream<<a;//添加数据
    12. qDebug()<<stream.readAll();

     设置进制数

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

    1. QString str;
    2. QTextStream stream(&str);
    3. int a=80;
    4. //使用函数设置
    5. stream.setIntegerBase(2);//二进制
    6. stream<<a;
    7. qDebug()<<stream.readLine();
    8. stream.setIntegerBase(8);//八进制
    9. stream<<a;
    10. qDebug()<<stream.readLine();
    11. stream.setIntegerBase(16);//十六进制
    12. stream<<a;
    13. qDebug()<<stream.readLine();
    14. //使用c++的方式
    15. stream<<bin<<a;//二进制
    16. qDebug()<<stream.readLine();
    17. stream<<oct<<a;//八进制
    18. qDebug()<<stream.readLine();
    19. stream<<hex<<a;//十六进制
    20. qDebug()<<stream.readLine();

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

    1. QString str;
    2. QTextStream stream(&str);
    3. int a=80;
    4. //显示前缀
    5. stream.setNumberFlags(QTextStream::QTextStream::ShowBase);
    6. stream<<bin<<a;//二进制
    7. qDebug()<<stream.readLine();
    8. stream<<oct<<a;//八进制
    9. qDebug()<<stream.readLine();
    10. stream<<hex<<a;//十六进制
    11. qDebug()<<stream.readLine();
    12. qDebug()<<tr("---------------------------");
    13. //显示前缀的大写版本
    14. stream.setNumberFlags(QTextStream::QTextStream::UppercaseBase|QTextStream::QTextStream::ShowBase);
    15. stream<<bin<<a;//二进制
    16. qDebug()<<stream.readLine();
    17. stream<<oct<<a;//八进制
    18. qDebug()<<stream.readLine();
    19. stream<<hex<<a;//十六进制
    20. qDebug()<<stream.readLine();

    1. QString str;
    2. QTextStream stream(&str);
    3. //显示小数点
    4. float f=10;
    5. float f1=10.222222;
    6. stream.setNumberFlags(QTextStream::ForcePoint);//无论怎样都会显示小数点
    7. stream<<f;
    8. qDebug()<<stream.readAll();
    9. stream<<f;
    10. qDebug()<<stream.readAll();

  • 相关阅读:
    单元格合并报java.lang.IllegalArgumentException
    Spring Boot整合Swagger报错:“this.condition“ is null
    DataExcel控件读取和保存excel xlsx 格式文件
    使用Markdown语法写矩阵
    万字泣血解析割韭菜内情,程序员别老想着做副业
    获取商品ID下所有的sku精准库存api
    Seata源码分析(一). AT模式底层实现
    C陷阱和缺陷 第3章 语义“陷阱” 3.2 非数组的指针
    Linux CPU之mpstat
    Day04JavaWeb第四次笔记---Maven的使用
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/128184472