QTextStream输出流格式化

简介: QTextStream输出流格式化

在项目中,经常需要对输出流进行格式化,那么今天小豆君就给大家介绍下输出流的格式化使用说明。

1 设置数字的输出格式

可以使用QTextStream类的setNumberFlags方法,指定数字的输出格式,它的标志位含义介绍如下:

  • QTextStream::ShowBase 指定以哪一种进制进行显示,16 ("0x"), 8 ("0"), or 2 ("0b")。
  • QTextStream::ForcePoint 如果输出类型是double或float,若这个数字不含小数部分,默认情况下不显示小数部分,若设置了该标志位,则显示小数部分(.)。
  • QTextStream::ForceSign 在输出的数字前面加上正负号,即"+"或"-"。
  • QTextStream::UppercaseBase 在进制指示中,使用大写字母表示,如"0X", "0B"。
  • QTextStream::UppercaseDigits 使用大写字母来表示10到35位数字,而不是小写。例如16进制中的a-f都用大写字母表示,或者科学计数法中的e使用大写E。


int main()
{
    QTextStream out(stdout);
    int i = 60;
    out.setIntegerBase(16);//设置16进制显示,所以使用输入输出流,也可以很容易的进行进制转换
    out << i << endl; //output:3c
    out.setNumberFlags(out.numberFlags()|QTextStream::ShowBase);
    out << i << endl; //output: 0x3c
    out.setNumberFlags(out.numberFlags()|QTextStream::ForceSign);
    out << i << endl; //output: +0x3c
    out.setNumberFlags(out.numberFlags()|QTextStream::UppercaseBase);
    out << i << endl; //output: +0X3c
    out.setNumberFlags(out.numberFlags()|QTextStream::UppercaseDigits);
    out << i << endl; //output: +0X3C
    double d = 100;
    out << d << endl;//output: 100
    out.setNumberFlags(QTextStream::ForcePoint);
    out << d << endl;//output: 100.000
}

2 宽度,填充和对齐方式

2.1 宽度

可以调用setFieldWidth来设置输出流的宽度,所谓宽度是指,当在流中输出一个数时,至少产生宽度值所规定数量的字符。如果插入字符的个数小于宽度值,则用某个字符对空余的位置进行填充。

一定注意,这里的宽度是指定输出字符的最小数目,如果数目不够,则使用填充字符进行填充,而不会截断输出。如果你设置宽度为2时输出1234,仍会得到1234。

QTextStream的宽度设置与标准库的有一点不同,它不需要像标准库那样,在每一个输出符前都需要设置一次宽度。

2.2 对齐方式

对齐方式一般和宽度一起使用,

  • QTextStream::AlignLeft 左对齐
  • QTextStream::AlignRight 右对齐
  • QTextStream::AlignCenter 居中
  • QTextStream::AlignAccountingStyle 和AlignRight一样,只是数字的符号是左对齐的。


int main()
{
    QTextStream out(stdout);
    int i = 60;
    out.setFieldWidth(6);
    out << i << endl; //output:    60
    out.setPadChar('-');
    out << i << endl; //output:----60
    out.setFieldAlignment(QTextStream::AlignLeft);
    out << i << endl; //output:60----
    out.setFieldAlignment(QTextStream::AlignRight);
    out << i << endl; //output:----60
    out.setFieldAlignment(QTextStream::AlignCenter);
    out << i << endl; //output:--60--
    out.setNumberFlags(QTextStream::ForceSign);
    out.setFieldAlignment(QTextStream::AlignAccountingStyle);
    out << i << endl; //output:+---60
}

3 精度

请看下面的程序:

QTextStream out(stdout);
double d = 12.3456789;
out << d << endl; //output:12.3457
Q_ASSERT(d==12.3456789);


此程序预想的输出结果应该是12.3456789,但实际的输出结果是12.3457,那么,是d的值改变了吗。当然没有,因为Q_ASSERT测试为真。

这是因为QTextStream 的精度默认设置为6,而如果想要改变它的默认精度,则可以使用setRealNumberPrecision方法。

QTextStream out(stdout);
 out.setRealNumberPrecision(10);
 double d = 12.3456789;
 out << d << endl; //output:12.3456789
 Q_ASSERT(d==12.3456789);


好了,关于QTextStream的格式化输出就先介绍到这里。


最后也希望大家多多支持小豆君的创作,关注小豆君的公众号“小豆君Qt分享”,最新文章都会在公众号第一时间发布,或者你有不懂的问题,关注公众号后,可加好友或进Qt群获得答案。

相关文章
|
14天前
将字符串写入文件
将字符串写入文件。
21 2
|
6月前
|
Linux Windows
写入文件
写入文件。
39 2
|
6月前
|
C语言 C++
01 按指定格式读写文件出现乱码
##按指定格式写文件使用stringstream
42 0
|
6月前
|
移动开发 Java Linux
IO流:字节输出流FileOutputStream的超详细用法
IO流:字节输出流FileOutputStream的超详细用法
|
存储 安全 C语言
C++输入和输出流1
C++输入和输出流1
47 0
|
C语言 C++ 开发者
C++输入流和输出流介绍
C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据; 使用 fscanf()、fgets() 等函数读取文件中的数据,使用 fprintf()、fputs() 等函数向文件中写入数据。 要知道,C 语言的这套 I/O 解决方案也适用于 C++ 程序,但 C++ 并没有“偷懒”,它自己独立开发了一套全新的 I/O 解决方案,其中就包含
字节、字符输入输出流
字节、字符输入输出流
54 0
缓冲流与打印流(字节与字符)
缓冲流与打印流(字节与字符)
62 0
|
缓存 Java
【Java】文件操作篇(三)字符输入流、字符输出流及常用子类
文章目录 写在前面 1 FileReader与FileWriter 1.1 文件字符流体系概述 1.2 FileReader构造方法与相关方法摘要 1.3 FileWriter构造方法与相关方法摘要 2 案例实操 2.1 FileReader案例 2.2 FileWriter案例 3 处理流 3.1 BufferedReader介绍及使用案例 3.2 BufferedWriter介绍及使用案例 3.3 缓存文件拷贝
【Java】文件操作篇(三)字符输入流、字符输出流及常用子类