模板库、工具类和控件(中)

一、前言

前面我们了解了关于Qt字符串的一些简单操作,容器类的分类和各自的主要特点以及用途,这一次我们了解一些常见的工具类和常见的控件。

二、QByteArry和QVariant

2.1  QByteArry

关于QByteArry,我们在上篇中曾经看到过。QByteArry和QString的功能和API基本类似,具有很多相似的函数。不同的地方在于QByteArry能够存储原生的二进制数据和8位编码的文本数据,那么何为原生的二进制数据和8为编码的文本数据呢?稍微了解计算机原理的童鞋可能都知道,计算机内部所有的数据都是以0和1的形式进行存储的,这种存储形式就是二进制。对于这些二进制代码,计算机并不知道其具体的含义,需要通过上下文进行决定。对于文件而言,即使是一个文本文件,读出时也可以按照二进制的形式读出,这就是二进制格式。如果把这些二进制中的0和1按照编码解释成一个个的字符,就可以构成一个文本了。因此,QByteArry实际上楇原生的二进制,也可以看作是文本,具有文本的一些操作。但是对于文本字符流的操作,还是建议使用QString而不是QByteArry,因为QString支持Unicode。

出于方便,QByteArry自动的保证最后一个字节之后的那位的值是“\0”,这样也导致QByteArry可以容易的转变为const char*,同样作为存储二进制的数据类型,QByteArry中间也可以存储“\0”。

2.2 QVariant

有时候我们希望将不同类型的数据存储在一个变量中,如果是在Java中可以通过Object类型的变量实现,但是C++中没有这种公有继承的类。Qt通过声明一个类,这个类包含所有需要存储的数据类型,这就是QVariant类。

QVariant类可以保存很多Qt的数据类型,包括QBrush、QColor、QCursor、QDataTime、QFont、QKeySequence、QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,并且还包括基本类型,int、float等等。

Qvariant还可以保存很多的集合类型,如QMap,QStringList和QList。其中item view classes,数据库模块和QSettings都大量使用了QVariant类,方便读写数据。

QVariant支持嵌套存储。

我们也可以自定义QVariant,被QVariant存储的数据类型必须有一个默认的构造函数和一个拷贝构造函数,同时首先必须使用Q_DECLARE_METATYPE()宏。通常会将这个宏放在类的声明所在头文件的下面。

三、算法及正则表达式

3.1 Qt5常用算法

常用算法在Qt的和模块中。

3.2 基本的正则表达式

Qt的QRegExp类是正则表达式的表示类,它基于Perl的正则表达式语言,完全支持Unicode,可以方便的完成处理字符串的一些操作,如验证、查找、替换和分割等。

正则表达式有表达式(expressions)、量词(quantifiers)和断言(assertions)组成。

(1)最简单的表达式是一个字符。比如我想要表示字符集的表达式可以使用[AEIOU]表示匹配所有的大些的原因字母;使用[^AEIOU]表示匹配所有的非元音字母;连续的字符集可是使用表达式[a-z],表示匹配所有的小写字母。

(2)量词说明表达式出现的次数,如“x[1,2]”表示x至少有一个,最多有两个。

在计算机语言中,标识符通常要求以字母或下划线开头,后面可以是字母、数字和下划线。比如“[A-Za-z_]+[A-Za-z_0-9]*”

+表示[A-Za-z_]至少出现一次,可以出现多次

*表示[A-Za-z_0-9]可以出现零次或者多次

正则表达式的量词

正则表达式的字符集

(3)“^” "$" "\b"都是正则表达式的断言

正则表达式的断言

举例说明,如果只有在using后面是namespace时才匹配using,则可以使用"using(?=E\s+namespace)" (此处“?=E”后面的“\s”表示匹配一个空白字符)。

如果使用“using(?!E\s+namespace)”,则表达式只有在using 后面不是namespace时才匹配using。

如果使用“using\s+namespace”,则匹配为using namespace。

C++编译器转义反斜杠,在正则表达式中包含\,需要写成\\,若要匹配反斜杠字符本身,键入四次\\\\。

正则的知识还是挺多的,因为自己还没有真正用过Qt的正则,这里先挖一个坑,以后有很好的例子的时候再补上来,

有些人叫小嗷快点更图像识别。其实,小嗷也想。但是,小嗷进的黑厂,忙的很。小嗷尽量快更。(小嗷还想抽时间看看别人同类型的书籍,或者更深入的书籍。当然,翻墙看老外的技术博客更好,呵呵想想就好)

大橘为重

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181019G0CDEG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券