Qt5开发学习之Qt工具类与简单算法(二)
来源:互联网 发布:淘宝有快排吹 编辑:程序博客网 时间:2024/06/05 17:10
今天主要学习Qt5的一些工具类:字符串类、容器类;再掌握几个Qt的算法。
1. 字符串类
Qt的字符串类 QString
保存16位Unicode值,提供丰富的操作、查询和转换等函数。该类还进行了使用隐式转换、高效的内存分配策略等多方面的优化。
- 字符串操作函数:
1)“+”用于组合两个字符串,“+=”用于将一个字符串追加到另一个字符串的末尾。例如:
QString str1 = "Hello ";str1 = str1 + "shige";// str1 == "Hello shige"
2)组合字符串的函数QString::sprintf(),类似于C标准库的字符串函数。例如:
QString str2;str2.sprintf("my %s is %d", "age", 25);// str2 == "my age is 25"
3)QString还有一种自己特有的字符串组合函数,QString::arg()函数,此函数可以处理很多的数据类型。它是类型安全的(不用自己制定类型,函数自动匹配),完全支持Unicode,并且允许改变“%n”参数的顺序。
QString str3;str3 = QString("This %1 is %2").arg("year").arg(2017)// str3 == "This year is 2017"// %1 被 "year" 替换;%2 被 "2017"替换。
4)QString也提供了一一些其他组合字符串的方法: insert()
函数,在特定位置插入字符串 prepend()
函数,在开头插入字符串 replace()
函数,用指定字符串替代原字符串中的某些字符
5)如果想去掉一些字符串的空白部分(如获取用户输入的账号时) trimmed()
函数,去除字符串两端的空白 simplified()
函数,使用单个空格代替字符串中所有空白部分
- 查询字符串数据
1) QString::startsWith()
判断一个字符串是否以某个字符串开头。第一个参数指定一个字符串,第二个参数指定是否大小写敏感。相对的,QString::endWith()
判断
QString str4 = "Beautiful China!";str4.startsWith("Beautiful", Qt::CaseSensitive);// 返回true
2)QString::contains()
判断一个指定的字符串是否出现过
QString str5 = "Beautiful China!";str4.contains("China", Qt::CaseSensitive);// 返回true
3)QString类重载了== >= <= <
运算符,即使是字符串也可以直接使用逻辑运算符进行比较。
- 字符串的转换
1)函数将字符串转换为数值类型的有:
toInt(); toDouble(); toFloat(); toLong(); toLongLong();
2)QString
提供的字符编码集的转换函数将会返回一个const char*
类型的QByteArray
,即构造函数QByteArray(const char*)
构造的QByteArray
对象。QByteArray
具有一个字节数组,既可以存储原始字节,也可以存储以‘\0’结尾的8位字符串。 toAscii()
返回ASCII编码的8位字符串 toLatin1()
返回ISO8859-1编码的8位字符串 toUtf8()
返回UTF-8编码的字符串 toLocal8Bit()
返回系统本地编码的8位字符串
2.容器类
Qt提供了一个通用的基于模板的容器类,存储的类型可以使基本的数据类型和Qt的一些数据类型。不过Qt和QObject及其它子类(如:QWidget和QDialog)是不能存放在容器中的。这个容器就类似于C++标准模板库的容器类。
- QList类:
QList<T>
存储给定数据类型T的一列数值,内部维护了一个指针数组,可以使用下标直接操作; - QLinkedList类:
QLinkedList<T>
是一个链式列表,它以非连续的内存块保存数据。不能使用下标只能使用迭代器,插入更有效率; - QVector类:
QVector<T>
在相邻内存中存储给定数据类型T的数值,既可以用下标访问数据,也可以用迭代器。 - QMap类:
QMap<key, T>
提供了一个从类型key到类型T的值的映射,一般是一个键对应一个值,有序的存储数据。想一键多值可以使用QMultiMap<key, T>
; - QHash类:
QHash<key, T>
类似于QMap,维护着一张哈希表,可以存储一键多值;
3. 算法及正则表达式
- Qt基本算法
Qt的<QtAlgorithms>
和<QtGlobal>
提供了几种常用的算法:
double b = qAbs(a); // 返回double类型的a的绝对值double max = qMax(a, b); // 返回最大值int c = qRound(a); // 四舍五入aqSwap(d, e); // 交换d和e的值qDebug() << // 相当于cout,输出
- 正则表达式
Qt的正则表达式由QRegExp类来表示,基于perl的正则表达式语言,完全支持Unicode。正则表达式由:表达式、量词和断言组成;
表达式在“[]”中,在“[]”中填入表达式的规则
量词表示出现的次数,在“{}”中,类似于常规的正则
正则表达式常用语限制输入的字符规则,如用户名和密码等,例:
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}")// 表示第一个元素必须是字母,后面接一个非0数字,再接0~2个数字
- Qt5开发学习之Qt工具类与简单算法(二)
- Qt5开发学习之调色板与各种工具类(五)
- Qt5开发学习之Qt概述(一)
- Qt5开发学习之Qt基本对话框(四)
- 【Qt学习一】Qt入门之Qt5.3.2+vs2010(中文版)+opencv2.4.9配置与简单测试
- 嵌入式开发之Qt学习篇——1、Qt5.1.0安装与配置
- Qt5开发学习之图形与SVG图像(八)
- Qt5开发学习之网络与通信(十二)
- Qt5开发学习之事件(十三)
- Qt5 学习(一)Qt介绍与安装
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程<二>
- QT5 学习之路02---QT简介
- 学习Qt:开发工具
- QT开发之旅二TCP调试工具
- Qt5与QML(二)
- 学习OpenCL开发(二)简单示例与性能分析
- Qt5开发学习之主窗体(六)
- Qt5开发学习之布局管理(三)
- Spring Data JPA基础使用
- 新安装的Myeclipse创建新项目Configure build path
- 计算机基础——码制表示
- 问题集
- STM32F207 TIM1 比较输出 输出多路不同频率
- Qt5开发学习之Qt工具类与简单算法(二)
- SF问答精选
- Java学习之正则表达式
- 股市基本名词解释
- mybatis的关联关系
- linux之管道
- Mac编辑hosts配置文件
- eclipse 设置快捷键 查找下一个 上一个 运行 java 程序
- js获取table的行数与列数