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
|
存储 数据采集
时序逻辑电路的应用及其作用
一、什么时序逻辑电路 时序逻辑电路是一种电子电路,用于处理和存储时序信息。它通过使用时钟信号来控制电路的行为,以实现特定的功能。 时序逻辑电路通常由触发器和组合逻辑电路组成。触发器是一种存储器件,可以存储和传递电信号。组合逻辑电路则根据输入信号的组合产生输出信号。 时序逻辑电路的行为是根据时钟信号的变化来确定的。时钟信号是一个周期性的信号,用于同步电路的操作。在每个时钟周期中,电路根据输入信号和当前状态来计算输出信号,并在时钟信号的上升沿或下降沿时更新状态。 时序逻辑电路可以用于实现各种功能,如计数器、状态机、时序控制器等。它在数字系统中起着重要的作用,用于处理时序信息和控制电路的行为。 二、
597 0
|
4月前
|
JavaScript
交叉类型的主要用途是表示对象的合成
交叉类型的主要用途是表示对象的合成
27 0
|
6月前
halcon基础系列之几何工具相关算子
halcon基础系列之几何工具相关算子
108 0
|
6月前
halcon基础系列之基于相关性模板匹配算子
halcon基础系列之基于相关性模板匹配算子
162 0
|
6月前
静态时序分析:工艺库的特征化条件和工作条件
静态时序分析:工艺库的特征化条件和工作条件
49 0
|
6月前
|
算法 计算机视觉 芯片
[Halcon&定位] 二维仿射变换原理与算子解析
[Halcon&定位] 二维仿射变换原理与算子解析
317 0
|
数据处理 计算机视觉 Python
图像数据处理:基本技巧与实例分析
图像数据处理:基本技巧与实例分析
165 0
|
大数据 开发者
聚合操作_多维聚合_编写代码 | 学习笔记
快速学习聚合操作_多维聚合_编写代码
115 0
聚合操作_多维聚合_编写代码 | 学习笔记
|
机器学习/深度学习 自动驾驶 机器人
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool
前不久一篇探讨过去十年深度度量学习研究进展的研究引发热议,不公平的实验设置等因素会使人们对领域进展产生误解。那么 3D 点云算子领域的进展是真实的吗?中科大和微软亚研的研究人员进行了系统性评估,并提出了无需可学参数的新型 3D 点云算子 PosPool。
274 0
3D点云算子并无实质进步?微软亚研重新评估,提出极简算子PosPool