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个数字