QTextStream(文本流)

news2024/11/18 16:44:21

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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Echarts 插件完成中国地图

目录前言&#xff1a;什么是 Echarts 插件中国地图成品展示步骤&#xff1a;完成中国地图代码总结&#xff1a;前言&#xff1a; 大家都知道&#xff0c;一般情况下&#xff0c;想要使用前端设置一个 中国地图 需要使用 canvas 画布进行编写&#xff0c;不仅代码多&#xff0c…

【滤波器】基于Matlab设计巴斯 切比雪夫 椭圆 低通高通带通带阻数字滤波器附GUI界面

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

11月VR大数据:SteamVR新增PICO 4串流数据统计

Hello大家好&#xff0c;每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么&#xff1f;关注这里就对了。我们会统计Steam平台的用户及内容等数据&#xff0c;每月初准时为你推送&#xff0c;不要错过喔&#xff01; 本数据报告包含&#xff1a;Steam VR硬…

暖通锅炉远程监控解决方案

现状及需求分析 随着科学技术的发展&#xff0c;人们对生活品质的追求越来越高&#xff0c;空调行业也在快速发展&#xff0c;建筑空调已经成为现代城市不可或缺的重要组成部分。一般楼宇大厦都采用大型空调机组供暖制冷&#xff0c;那如何保证设备能恒温正常运行&#xff1f;…

[Python图像处理] 使用OpenCV检测对象颜色

使用OpenCV检测对象颜色前言使用 OpenCV 检测对象颜色相关链接前言 检测图像中对象颜色的一种简单方法是首先将图像从 RGB 转换为 HSV 颜色空间&#xff0c;然后使用一系列色调检测对象&#xff0c;这可以通过使用 OpenCV 库轻松完成。为了完成对象检测任务&#xff0c;我们需…

【论文合集】2022年12月医学影像期刊论文合集

★ 本月IEEE Transactions on Medical Imaging(1区 top if 11.037) 共41篇, 本月无MIA。 ”标题高频词汇 (learning, 13), (imaging, 6), (image, 6), (segmentation, 6), (network, 6), (deep, 5), (images, 5), (medical, 4), (multiple, 4), (dynamic, 4), (mri, 4), (magn…

《痞子衡嵌入式半月刊》 第 40 期

痞子衡嵌入式半月刊&#xff1a; 第 40 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目&#xff08;GitHub: JayHeng/pzh-mcu-bi-weekly&#xff09;&#xff0c;欢…

[附源码]计算机毕业设计基于Springboot颐养天年辅助平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

网络管理配置怎么路由

作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。创作不易&#xff0c;动动小手…

基于springboot的鲜花销售商城网站

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Qt-FFmpeg开发-打开本地摄像头(6)

Qt-FFmpeg开发-打开本地摄像头【软解码 OpenGL显示YUV】 文章目录Qt-FFmpeg开发-打开本地摄像头【软解码 OpenGL显示YUV】1、概述2、实现效果3、FFmpeg打开摄像头解码流程4、查询可用摄像头5、设置摄像头打开参数6、主要代码6.1 解码代码5.2 OpenGL显示RGB图像代码7、完整源代码…

SQLDEV平台教学 - 权限配置

前置 - 安装SQLDEV并激活 未安装的可以访问SQLDEV官网下载社区版安装或申请商业版试用。 社区版只支持单个项目&#xff0c;无法新建项目&#xff0c;本篇以商业版为演示基础。 新建项目 超级管理员/应用管理员账号登录系统。点击顶部导航“应用管理”&#xff0c;在下拉菜单…

nginx $uri导致的CRLF注入漏洞

路径&#xff1a;nginx/insecure-configuration 运行成功后&#xff0c;Nginx将会监听8080/8081/8082三个端口&#xff0c;分别对应三种漏洞。 8080&#xff1a;CRLF注入漏洞 8081&#xff1a; 目录穿越漏洞 8082&#xff1a; add_header被覆盖 $uri导致的CRLF注入漏洞 Nginx…

GDP-L-岩藻糖二钠盐,GDP-fucose ,6-Deoxy-β-L-galactopyranosylguanosine 5′-diphosphate

产品名称&#xff1a;GDP-L-岩藻糖二钠盐&#xff0c;GDP-B-L-岩藻糖(钠盐) 英文名称&#xff1a;GDP-fucose &#xff0c;6-Deoxy-β-L-galactopyranosylguanosine 5′-diphosphate Chemical Name GDP-L-岩藻糖 GDP-L-fucose disodium salt CAS Number 15839-70-0 Mol. For…

了解低压差稳压IC(LDO)及其在电池驱动设备中的意义

了解低压差稳压IC&#xff08;LDO&#xff09;及其在电池供电设备中的重要性 如今&#xff0c;电子设备的尺寸比以往任何时候都要小。这使我们能够在智能手表&#xff0c;健身追踪器和其他可穿戴设备等紧凑型便携式设备中加入功能&#xff0c;它还帮助我们部署远程物联网设备进…

Batch Normalization——李宏毅机器学习笔记

Batch Normalization 详细可见paper《Batch Normalization: Accelerating Deep Network Training by Reducing Internet Covariate Shift》&#xff0c;2015 Feature Scaling&#xff08;特征缩放&#xff09;/Feature Normalization &#xff08;引言&#xff09; Make dif…

Python入门项目,从不会编程到完成这个小游戏,也就两天时间

前言 还在啃书本学python吗&#xff1f; 为什么不试试用有趣的小游戏来学编程&#xff1f;自己开发的游戏&#xff0c;既能活学活用python&#xff0c;又能找回学习的自信。 &#xff08;文末送读者福利&#xff09; 下面我带大家开发一个Python小游戏&#xff0c;这是我在…

ORACLE连接不上 Linux网络 端口 问题判断

最近遇到一个问题&#xff0c;配置一个oracle数据源怎么都连接不上&#xff0c;ping Ip可以连接通&#xff0c;且毫秒数都很小。telnet 也能连接 但是很快就自动断开。 别人也能连接oracle的数据库&#xff0c;我这边服务器不行&#xff0c;就很奇怪。各种方法都来试试。 SEL…

GD32F30x系列Systick系统滴答定时器 (Qt模拟项目 可套函数模板)

GD32F30x系列Systick系统滴答定时器【0】Qt 项目效果展示【1】SysTick 简介【2】SysTick 寄存器【3】代码配置和初始化说明【3.1】core_cm4.h头文件【3.2】systick.h【3.3】mainwindow.h【3.4】systick.cpp【3.5】mainwindow.cpp [主流程]本次Systick系统滴答定时器&#xff0c…

Ubuntu 18.04安装fast-dds

提纲 1、概述 2、foonathan_memory_vendor 3、fast-cdr 4、fast-dds 5、编译HelloWorldExample 6、安装fast-dds-gen&#xff0c;使用IDL文件构建代码 1、概述 fastdds是干什么&#xff0c;就不重复说了。 操作系统是Ubuntu18.04 本次采用源码编译安装&#xff0c;需要使用到…