我的QT5学习之路(三)——模板库、工具类和控件(上)
扫描二维码
随时随地手机看文章
一、前言 “合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下”,上一章我们知道了如何使用Qt创建简单的示例程序,了解了最基本的Qt框架,在进一步学习Qt框架和消息机制前,我们应该对Qt本身有一个更细致的了解,这个了解就是Qt的模板库、工具类和控件。
回到顶部(go to top)
二、Qt的模板库、工具类和控件2.1 字符串类1、字符串的操作 我们了解字符串的操作就是要了解字符串主要有哪些操作符,Qt基于C++继承和强化了string的功能,结构类型为QString,QString提供了一个二元的“+”和“+=”操作符,其中“+=”操作符功能和append函数方法具有同样的功能,是现在一个字符串末尾追加另一个字符串,学习时可基于C++中String类进行比较。
1 QString str1="nihao";
2 QString str2="Qt";
3
4 str1+=str2; //str1="nihaoQt"
5 str1=str1+str2; //str1="nihaoQtQt"
6 str1.append(str2); //str1="nihaoQtQtQt"
7 str1.append("yes"); //str1="nihaoQtQtQtyes"
Qt组合字符串的另一个函数楇 QString::sprintf(),此函数支持的格式定义符和C++库中的函数sprintf定义的一样。Qt还提供了另外一种方便的字符串组合方式,使用QString::arg()函数,此函数的重载可以处理多种数据类型,一些重载具有额外的参数对字段的宽度、数字基数或者浮点数精度进行控制。相对于sprintf来说,srg是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变"%n"参数的顺序。
1 QString str;
2 str=QString("%1 was born in %2 .").arg("Rimond").arg(1990);
3 //str="Rimond was born in 1990".
此外,QString也提供了一些其他组合字符串的方法
函数名称函数功能
insert()在原字符串特定的位置插入另一个字符串
prepend()在原字符串的开头插入另一个字符串
replace()用指定的字符串代替原字符串中的某些字符
为了解决特定场景比如去除一个字符串两端的空白(空白字符包括回车字符“n”,换行字符“r”,制表符“t”和空格字符等),QString提供了特定的函数。
函数名称函数功能
trimmed() 移出字符串两端的空白字符
simplified()移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符
1 QString str=" Hello t QT n ! ";
2 str=str.trimmed();
3
4 //str=" Hello t to n you! "
5 //如果使用str=str.simplified(),str的结果是“Hello Qt !”
2、查询字符串数据 查询字符串数据有多种样式。
(1) QString::startsWith()判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认大小写敏感)。
1 QString str="Hello Qt!";
2 str.startsWith("Hello",Qt::CaseSensitive); //返回真
3 str.startsWith("Qt",Qt::caseSenstive); //返回假
(2) QString::endwith()类似于QString::startswith(),它用来判断一个字符串是否以某个字符串结尾。
(3) QString::contains()判断一个指定的字符串是否出现过。
1 QString str ="Hello QT!";
2 str.contains("QT",Qt::CaseSensitive); //返回真
(4) QString类还重载了多种用于比较的操作符,用法可参照C++ string类中重载的比较操作符。此外,QString类增加了两个特殊函数。
localeAwareCompare(const QString&,const QString&):静态函数,比较前后两个字符串,如果前面字符串小于后面字符串,则返回值为负整数;如果等于则返回0;如果大于则返回值为正整数,该函数用于比较基于本地字符集,而且楇平台相关的,通常该函数用于向用户显示一个有序的字符串列表。
compare(const QString&,const QString&::CaseSensitivity):该函数可以指定是否进行大小写的比较,而大小写的比较楇完全基于字符的Unicode编码值的,而且是非常快的,返回值类似于localeAwareCompare函数。
3、字符串的转换 由于Qt的跨平台型,可移植性等特点反映了其在字符串上的灵活性,QString类提供了丰富的转换函数,可以实现讲一个字符串转换为数值类型或者其他的字符编码集。
(1) QString::toInt()函数实现了将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong()等。
1 QString str="125";
2 bool ok;
3 int hex=str.toInt(&ok,16); //ok=true,hex=293
4 int dec=str.toInt(&ok,10); //ok=true,dec=125
可以看到上面的16和10分别代表了进制,ok用于传递一个地址,表示转换结果。
(2) QString提供的字符串编码集的转换函数将会返回一个const char*类型版本的QByteArry,即构造函数QByteArry(const char*)构造的QByteArry对象。QByteArry类具有一个字符数组,它既可以存储原始字节(raw bytes),也可以存储传统的以“