QTextStream之操纵算子的使用

简介: QTextStream之操纵算子的使用

1 操纵算子

在上一篇文章,小豆君介绍了QTextStream的格式化输出:

int i = 60;
out.setIntegerBase(16);//设置16进制显示,所以使用输入输出流,也可以很容易的进行进制转换
out << i << endl; //output:3c


但是,如果我想输出一个数字表格,每列分别以十进制,二进制,八进制,十六进制进行显示,那么,用上一篇的方法,可以这样写

int main()
{
    QTextStream out(stdout);
    out.setNumberFlags(QTextStream::ShowBase);
    out.setFieldWidth(10);
    out << "dec"
        << "bin"
        << "oct"
        << "hex" << endl;
    QList<int> intList;
    intList << 12 << 16 << 18;
    for (int i = 0; i < intList.size(); ++i)
    {
        int num = intList.at(i);
        out.setIntegerBase(10);
        out << num;
        out.setIntegerBase(2);
        out << num;
        out.setIntegerBase(8);
        out << num;
        out.setIntegerBase(16);
        out << num << endl;
    }
}


输出是:


在for循环中,每次输出一种进制,就需要重新设置输出标志,这显得很不灵活。为了解决这样的问题,可以使用操纵算子,Qt中的操纵算子和标准库中的用法基本相同。

下面是使用操纵算子简化的程序,把for循环替换一下:

for (int i = 0; i < intList.size(); ++i)
{
    //使用操纵算子进行输出
    int num = intList.at(i);
    out << dec << num
        << bin << num
        << oct << num
        << hex << num << endl;
}


上面的bin dec oct hex都被称作操纵算子,这大大简化了代码。

关于QTextStream的操纵算子,大家可以打开Qt的帮助文档:


这些操纵算子都很简单,小豆君就不一一介绍了。

以上的操纵算子都是Qt提供给我们的,但是有时候我们需要一些自定义的操纵算子,下面,我们来看看如何创建自己的操纵算子。

2 创建操纵算子

如何创建操纵算子,最好的参考就是看看Qt代码中如何做的,下面是bin的声明:

QTextStream &bin(QTextStream &s);


它是以QTextStream对象的引用为参数,返回值为QTextStream对象的引用的函数。 例如,我想在输出流中加入一个tab符,那么,可以这样做:

QTextStream &tab(QTextStream &s)
{
    return s << '\t';
}
int main()
{
    QTextStream out(stdout);
    QList<int> intList;
    intList << 12 << 16 << 18;
    for (int i = 0; i < intList.size(); ++i)
    {
        int num = intList.at(i);
        out << tab << num;
    }
}


输出为:


好了,关于操纵算子的内容就讲到这里吧,我们下次再见。


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

相关文章
|
6月前
|
机器学习/深度学习 数据可视化 算法
数据处理方法—— 7 种数据降维操作 !!
数据处理方法—— 7 种数据降维操作 !!
209 0
|
3月前
|
缓存 程序员 调度
第3章-图形处理单元-3.1-数据并行架构
第3章-图形处理单元-3.1-数据并行架构
32 1
|
4月前
|
SQL 安全
线程操纵术并行策略问题之调整并行流的并行度问题如何解决
线程操纵术并行策略问题之调整并行流的并行度问题如何解决
|
6月前
halcon基础系列之几何工具相关算子
halcon基础系列之几何工具相关算子
123 0
|
设计模式 前端开发 JavaScript
分时函数优化大数据量渲染
在我们的业务中,我们常常会遇到大数据渲染,很早之前我们考虑到有用到虚拟列表,IntersectionObserver交叉观察器,前端分页查询来优化大数据量渲染
180 0
分时函数优化大数据量渲染
|
大数据 开发者
聚合操作_多维聚合_编写代码 | 学习笔记
快速学习聚合操作_多维聚合_编写代码
116 0
聚合操作_多维聚合_编写代码 | 学习笔记
|
分布式计算 大数据 Spark
Rdd 算子_转换_集合操作 | 学习笔记
快速学习 Rdd 算子_转换_集合操作
Rdd 算子_转换_集合操作 | 学习笔记
|
分布式计算 大数据 Spark
RDD 算子_转换_重分区 | 学习笔记
快速学习 RDD 算子_转换_重分区
RDD 算子_转换_重分区 | 学习笔记
|
分布式计算 大数据 数据处理
RDD 算子_分类 | 学习笔记
快速学习 RDD算子_分类
|
机器学习/深度学习 自动驾驶 机器人
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool
前不久一篇探讨过去十年深度度量学习研究进展的研究引发热议,不公平的实验设置等因素会使人们对领域进展产生误解。那么 3D 点云算子领域的进展是真实的吗?中科大和微软亚研的研究人员进行了系统性评估,并提出了无需可学参数的新型 3D 点云算子 PosPool。
276 0
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool