- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 Qt的模板库、工具类及控件
;;;;;;3.2.1 QList类、QLinkedList类和QVector类
经常使用到的Qt容器类有QList、QLinkedList和QVector等。在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率,表3.1列出了QList、QLinkedList和QVector容器的时间复杂度。
;1.QList类
QListT是目前为止最常用的容器类,它存储给定数据类型T的一列数值。继承自QList类的子类有QItemSelection、QQueue、QSignalSpy以及QStringList和QTestEventList。
QList提供了可以在列表进行追加的QList::append()和Qlist::prepend()函数,也提供了在列表中间完成插入操作的函数QList::insert()。相对于任何其他的Qt容器类,为了使可执行代码尽可能少,QList被高度优化。
QListT维护了一个指针数组,该数组存储的指针指向QListT存储的列表项的内容。;2.QLinkedList类
QLinkedListT是一个链式列表,它以非连续的内存块保存数据。
QLinkedListT不能够使用下标,只能够使用迭代器访问它的数据项。与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。
3.QVector类
QVectorT在相邻的内存中存储给定数据类型T的一组数值。在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是由QVector存储数据的方式决定的。
;4.Java风格迭代器遍历容器
Java风格的迭代器是Qt 4新加入的一个功能。同STL风格的迭代器相比,它使用起来更简单方便,不过这也是以轻微的性能损耗为代价的。对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,其分类如表3.2表示。
;5.STL风格迭代器遍历容器
对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问,一种提供读写访问。由于只读类型的迭代器要比读写迭代器速度更快,所以应尽可能地使用只读类型的迭代器。两种风格迭代器分类如表3.3表示。
?
;QMap类和QHash类具有非常类似的功能,它们的差别仅在于:
? QHash具有比QMap更快的查找速度。
? QHash以任意的顺序存储数据项,而QMap总是按照键Key顺序存储数据。
? QHash的键类型Key必须提供operator==()和一个全局的qHash(Key)函数,而QMap的键类型Key??须提供operator()函数。
二者的时间复杂度比较如表3.4所示。
;1.QMap类
QMapKey,T提供了一个从类型为Key的键到类型为T的值的映射。
QMap存储的数据形式是一个键对应一个值,并且按照键Key的次序存储数据。为了能够支持一键多值的情况,QMap提供了QMapKey,T::insertMulti()和QMapKey,T::values()函数。存储一键多值的数据时,也可以使用QMultiMapKey,T容器,它继承自QMap。
2.QHash类
QHashKey,T具有和QMap几乎完全相同的API。QHash维护着一张哈希表(hash table),哈希表的大小和QHash的数据项的数目相适应。
;3.Java风格迭代器遍历容器
对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型:一种提供只读访问,一种提供读写访问,其分类如表3.5所示。
;;4.STL风格迭代器遍历容器
对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问,一种提供读写访问,其分类如表3.6所示。
;;QVariant类类似于C++的联合(union)数据类型,它能够保存很多Qt类型的值,包括QColor、QBrush、QFont、QPen、QRect、QString、QSize等,也能够存放Qt的容器类型的值。Qt的很多功能都是建立在QVariant基础上的,比如Qt的对象属性以及数据库功能等。
下面举例介绍QVariant类的用法。具体内容。
;3.4.1 Qt常用算法
Qt的QtAlgorithms和QtGlobal模块提供了一些算法和函数。下面简单介绍常用的几个算法的用法。
;;类似的量词如表3.8所示:;⑶“^”、“$”、“\b”都是正则表达式的断言,正则表达式断言如表3.9所示。;3.5.1 按钮组(Buttons)
按钮组(Buttons)如图3.1所示。
;下面以QPushButton 为例介绍按钮的用法,其他按钮的用法与此类似。
(1) 建立一个工程。在创建过程中,在“Qt4 Gui Applicati
文档评论(0)