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 种数据降维操作 !!
198 0
|
3月前
|
OLAP 数据处理 数据库
ADB 自适应优化器的神秘抉择:ORCA 优化器究竟在何种场景被选中?
【8月更文挑战第27天】在数据驱动时代,数据库优化对提升系统性能至关重要。ADB(AnalyticDB)的自适应优化器可根据不同场景智能选择最优策略。尤其在处理大规模数据与复杂查询时,ORCA 优化器能有效规划执行路径,提高查询效率。例如,在电商数据库中进行多表关联查询或在金融交易数据库中的高并发查询环境下,ORCA 能精细化优化连接顺序和执行方式,减少数据处理量并避免资源竞争,从而显著提升系统响应能力和整体性能。
47 0
|
3月前
|
缓存 程序员 调度
第3章-图形处理单元-3.1-数据并行架构
第3章-图形处理单元-3.1-数据并行架构
32 1
|
SQL 存储 数据库
DBMS的功能和特征两
DBMS(数据库管理系统)是一种用于管理和操作数据库的软件系统。它提供了一系列功能和特征,使得用户可以方便地存储、检索、更新和删除数据,同时还提供了数据安全、数据完整性和数据一致性等保障。下面将详细介绍DBMS的功能和特征。 一、DBMS的功能 1. 数据定义功能:DBMS提供了定义数据库结构和数据模型的功能。用户可以使用DDL(数据定义语言)来创建表、定义字段、设置约束和索引等,从而实现数据库的结构定义。 2. 数据操作功能:DBMS提供了对数据库进行增、删、改、查等操作的功能。用户可以使用DML(数据操作语言)来插入、更新、删除和查询数据,从而实现对数据的操作。 3. 数据查询功能
208 0
|
6月前
静态时序分析:工艺库的特征化条件和工作条件
静态时序分析:工艺库的特征化条件和工作条件
50 0
|
数据处理 计算机视觉 Python
图像数据处理:基本技巧与实例分析
图像数据处理:基本技巧与实例分析
166 0
|
机器学习/深度学习 人工智能 编解码
CVPR 2022 | 逆渲染中的⾼效间接光照建模
CVPR 2022 | 逆渲染中的⾼效间接光照建模
579 0
CVPR 2022 | 逆渲染中的⾼效间接光照建模
|
大数据 开发者
聚合操作_多维聚合_编写代码 | 学习笔记
快速学习聚合操作_多维聚合_编写代码
115 0
聚合操作_多维聚合_编写代码 | 学习笔记
|
存储 算法
双目立体匹配之代价聚合
双目立体匹配之代价聚合
201 0
双目立体匹配之代价聚合
|
机器学习/深度学习 自动驾驶 机器人
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool
前不久一篇探讨过去十年深度度量学习研究进展的研究引发热议,不公平的实验设置等因素会使人们对领域进展产生误解。那么 3D 点云算子领域的进展是真实的吗?中科大和微软亚研的研究人员进行了系统性评估,并提出了无需可学参数的新型 3D 点云算子 PosPool。
274 0
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool