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群获得答案。