QT学习笔记(六):QString::arg()函数用法小结

QT学习笔记(五):Qt5的QString的arg用法

在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(只是有点类似)。
在QT5的帮助文档中,可以看出以下几点:
使用arg(str1, str2, str3)这种方法进行替换。
使用arg(str1).arg(str2).arg(str3)这种方法进行替换。
​使用arg(int, int, int)这种方式进行替换。

解释以下两种方法:

1.使用arg(str1, str2, str3)

这种方法要求str1、str2、str3都为const QString &类型,即:

QString QString::arg(const QString & a1, const QString & a2, const QString & a3) const

同时,arg( )里的参数实现从1个到9个,也就是说最多只能有9个!即在实现中,arg的定义中参数最多的为:

QString QString::arg(const QString & a1, const QString & a2, const QString & a3, const QString & a4, const QString & a5, const QString & a6, const QString & a7, const QString & a8, const QString & a9) const

这也就意味着,如果有如下代码:

QString str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").arg("1","2","3","4","5","6","7","8","9")

str将只会输出:

"1 2 3 4 5 6 7 8 9 %10 %11"

解决方法为在后面再加一个arg方法,放上后面两个对应的参数:

QString str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").arg("1","2","3","4","w","6","7","8","9").arg("a","b");
//输出为:
// "1 2 3 4 5 6 7 8 9 a b"

注意:在QT5帮助文档中,给出了如下代码:

QString str;
str = "%1 %2";str.arg("%1f", "Hello");        // returns "%1f Hello"
str.arg("%1f").arg("Hello");    // returns "Hellof %2"

如果你copy这个代码去测试一下,会发现,输出结果还是:"%1 %2" 。根本没有其给出的结果。(没找到源码,有谁知道怎么查看QT的源码,求帮助!说找src文件夹的就不要来了,根本木有)

所以在使用的时候一定要注意一下。要紧跟字符串使用arg( )

2.使用arg(str1).arg(str2).arg(str3)

这种方法其实前面用到了,如下面例子:

QString str=QString("%1 %2 %3 %4").arg("A").arg("B").arg("C").arg("D");
//str=="A B C D"

简单说就是挨着替换呗。但请注意下面的形式:

str = QString("%1 %2").arg("%1World", "Hello");
qDebug()<<str;
//输出为:"%1World Hello"
str = QString("%1 %2").arg("%1World").arg("Hello");
qDebug()<<str;
//输出为:"HelloWorld %2"
//第一个arg执行完后变为:QString("%1World %2").arg("Hello")
//再次执行后"Hello"替换的为%1

所以在使用多个arg( )连接时,一定要注意,前面连接使用的arg( )里如果有==“%+数字”==的情况,后面的arg( )会同样替换!

请注意下列例子:

str = QString("%1 %2").arg("%1World").arg("Hello");
//输出:"HelloWorld %2"
str = QString("%1 %2").arg("%2World").arg("Hello");
//输出:"HelloWorld Hello"
str = QString("%1 %2").arg("%3World").arg("Hello");
//输出:"%3World Hello"
str = QString("%1 %2").arg("%8World").arg("Hello");
//输出:"%8World Hello"
str = QString("%1 %6").arg("%3World").arg("Hello");
//输出:"HelloWorld %6"
str = QString("%2 %6").arg("%3World").arg("Hello");
//输出:"HelloWorld %6"
str = QString("%0 %6").arg("%3World").arg("Hello");
//输出:"HelloWorld %6"
str = QString("%-1 %6").arg("%3World").arg("Hello");
//输出:"%-1 HelloWorld"

arg( )里的参数在进行替换时,只会按照数字从小到大的顺序进行替换,只有比当前数字小的所有数字都替换完成了,才会替换当前数字,否则将当前数字和%按字符串处理。且数字为自然数!

3. 使用arg(int, int, int)

构造函数原型为:

QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char( ' ' )) const

a:表示要处理的数字;fieldWidth:字宽;base:数字基数

如下列:

str = QString("十进制 63 的十进制为 %1").arg(63, 0, 10);
//输出:"十进制 63 的十进制为 63"
str = QString("十进制 63 的十六进制为 %1").arg(63, 0, 16);
//输出:"十进制 63 的十六进制为 3f"
str = QString("%1 %L2 %L3").arg(12345).arg(1987654321)  //根据结果,可知道这个L的作用.arg(12345, 0, 8); //但使用这种方式时,L失效
//输出为:12345 1,987,654,321 30071
//这里%L3的L没有任何作用

在原型中的a的类型还可以是uint、long、double、udouble等数字的类型!

这里当a的类型为double时,原型为:

QString QString::arg(double a, int fieldWidth = 0, char format = 'g', int precision = -1, QChar fillChar = QLatin1Char( ' ' )) const

多了两个参数:format和precision,一个指明规格,一个指明精度。规格默认为 ‘g’ 或 ‘G’,指示后面的精度为整数和小数部分总和的长度;规格为’e’或 ‘E’ 时,表示为科学记数法形式,精度部分指示的为小数部分的位数长度;规格为其他字符时,无作用,输出原double数字。如:

double d = 12.345689;
str = QString("delta: %1").arg(d, 0, 'g',4);
//输出为:"delta: 12.35"     ---这里进行了四舍五入
str = QString("delta: %1").arg(d, 0, 'G',5);
//输出为:"delta: 12.346"     ---这里进行了四舍五入
str = QString("delta: %1").arg(d, 0, 'e',4);
//输出为:"delta: 1.234e+01"
str = QString("delta: %1").arg(d, 0, 'E',4);
//输出为:"delta: 1.234E+01"
str = QString("delta: %1").arg(d, 0, 'r',4);
//输出为:"delta: 12.345689"
str = QString("delta: %1").arg(d, 0, 'Q',4);
//输出为:"delta: 12.345689"

源博客:
https://www.cnblogs.com/lomper/p/4135387.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RuntimeError: DataLoader worker (pid(s) 13512, 280, 21040) exited unexpectedly

pytorch出现这个错误&#xff0c;是因为正在运行的主程序缺少 if __name__ __main__: 在运行的主程序代码之前加上这一句

第三周总结

在第三周的学习中&#xff0c;我们主要学习了循环语句&#xff08;while&#xff0c;do/while,for循环&#xff09;&#xff0c;数组&#xff0c;方法。而重点就在for循环和方法。而对于for循环我要做的就是多练&#xff0c;深入了。但对于方法这一块&#xff0c;我连有时候该怎…

道阻且长,Libra 项目负责人长文回应一切质疑

来源&#xff1a;星球日报当地时间 7 月 3 日&#xff0c;Facebook Libra 项目负责人 David Marcus 于个人 Facebook 发布长文《Libra, 2 weeks in》&#xff0c;就过去两周 Libra 所遇到的一些质疑及误解进行解释。以下为全文内容&#xff1a;自 Libra 正式公开已经两周了&…

QT学习笔记(七):定时器事件的3种常用使用方式

QT学习笔记&#xff08;七&#xff09;&#xff1a;定时器事件的2种常用使用方式 Qt中定时器的使用有2种方法&#xff1a;一种是使用QObject类提供的定时器通过重载 timerEvent 事件处理过程函数&#xff0c;一种就是使用QTimer类。 其中QTimer 类来实现定时器使用的更多&…

pytorch保存模型时报错***object has no attribute 'state_dict'

定义了一个类BaseNet并实例化该类&#xff1a; netBaseNet() 保存net时报错object has no attribute state_dict torch.save(net.state_dict(), models_dir) 原因是定义类的时候不是继承nn.Module类&#xff0c;比如&#xff1a; class BaseNet(object):def __init__(self…

LightOJ - 1140 How Many Zeroes?

Description Jimmy writes down the decimal representations of all natural numbers between and including m and n, (m ≤ n). How many zeroes will he write down? Input Input starts with an integer T (≤ 11000), denoting the number of test cases.Each case cont…

​机器学习算法优缺点对比及选择(汇总篇)

转自&#xff1a;机器学习与统计学本文的目的&#xff0c;是务实、简洁地盘点一番当前机器学习算法。文中内容结合了个人在查阅资料过程中收集到的前人总结&#xff0c;同时添加了部分自身总结&#xff0c;在这里&#xff0c;依据实际使用中的经验&#xff0c;将对此模型优缺点…

pytorch加载的模型测试的结果和保存时测试的结果不一致

假设有一个dropout网络net&#xff0c;训练过程中用测试集进行了测试&#xff0c;接着将该网络进行了保存 torch.save(net.state_dict(), path) 然后将保存的网络加载出来&#xff1a; netclass_net() # 先定义net的结构 net.load_state_dict(torch.load(path)) 接着用同样…

QT学习笔记(八):顺序容器和关联容器

QT学习笔记&#xff08;八&#xff09;&#xff1a;顺序容器和关联容器一、前言二、容器介绍2.1 顺序容器2.2 关联容器二、顺序容器示例三、关联容器一、前言 在Qt库中为我们提供了一系列的基于模板的容器类(container classes)。这些类可以被用来存储特定类型的项(items)。例…

页面的缓存与不缓存设置

HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息&#xff0c;包括浏览器 端&#xff0c;中间缓存服务器端(如&#xff1a;squid等)&#xff0c;Web服务器端。本文讨论头信息 中带缓存控制信息的HTML页面(JSP/Servlet生成好出来的也是HTML页面)在中间缓存服务器中的缓存情…

MATLAB警告: 矩阵为奇异工作精度

原因是在求逆的时候使用了inv函数&#xff0c;而inv函数对于不是可逆矩阵的矩阵求逆就会出错 将inv函数改为pinv函数&#xff0c;pinv就是对不是可逆矩阵的矩阵求伪逆

QT学习笔记(九):遍历容器-迭代器(iterators)

QT学习笔记&#xff08;九&#xff09;&#xff1a;遍历容器-迭代器&#xff08;iterators&#xff09;遍历容器 &#xff1a;1、Jave风格:2、STL风格:3、foreach 关键字:遍历容器 &#xff1a; 遍历一个容器可以使用迭代器&#xff08;iterators&#xff09;完成&#xff0c;…

pytorch自定义数据集和数据加载器

假设有一个保存为npy格式的numpy数据集&#xff0c;现在需要将其变为pytorch的数据集&#xff0c;并能够被数据加载器DataLoader所加载 首先自定义一个数据集类&#xff0c;继承torch.utils.data.Dataset类 在这个类中要实现__init__&#xff0c;__getitem__&#xff0c;__le…

jQuery 插件格式 规范

方式一&#xff08;自定义对象&#xff09;&#xff1a;(function($, window, document) { var Plugin, defaults, pluginName;调用时的函数名&#xff1a;pluginName "slidesjs";默认配置&#xff1a;defaults {width: 940,height: 528,callback: {loaded: functio…

QT学习笔记(十):通用算法示例

QT学习笔记&#xff08;十&#xff09;&#xff1a;通用算法示例 std是C标准库统一使用的命名空间(namespace)的名称&#xff0c;C标准库中的名字全部都在std这个命名空间中,std也就是英文"standard"&#xff08;标准&#xff09;的缩写。 #include <QCoreAppl…

Input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same

原因是没有把输入数据类型转为float类型 首先找到代码出错的位置&#xff0c;将该处的数据类型转为float类型&#xff1a; x x.type(torch.FloatTensor)

了解因果论:从珀尔的《为什么》开始

图I&#xff1a;AI从达特茅斯会议&#xff08;1956年&#xff09;得名至今已有六十年&#xff0c;期间几起几落&#xff0c;群星璀璨&#xff0c;像一个大舞台&#xff0c;你方唱罢我登场&#xff0c;留下了一些永载史册的理论和成就&#xff0c;但涉及因果的甚少作者&#xff…

外观模式(三层解耦)

说到外观模式&#xff0c;很容易想到的是设计一件漂亮的衣服然后穿上自己的身上&#xff0c;让自己看起来更加的漂亮&#xff0c;但是这个可能并不是这样子的&#xff0c;从更深层次的来说&#xff0c;外观更应该是所见即所得的&#xff0c;对于观众来说&#xff0c;看起来可能…

QT学习笔记(十一):QString类

QT学习笔记&#xff08;十一&#xff09;&#xff1a;QString类1、概述2、编辑操作3、查询操作3、转换操作1、概述 1.1 QString 类是 Qt 中用于表示字符串的类&#xff0c;实现在 QtCore 共享库中。QString 类在实现上有以下特征: 1&#xff09;字符串采用 Unicode 内部编码&…

pytorch数据加载时报错OSError: [Errno 22] Invalid argument

将数据加载器的num_workers删去&#xff0c;即由 train_loader torch.utils.data.DataLoader(trainset, batch_sizebatch_size, shuffleTrue, pin_memoryTrue, num_workers3) 改为 train_loader torch.utils.data.DataLoader(trainset, batch_sizebatch_size, shuffleTrue…