qt核心编程.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
qt核心编程,qtquick核心编程pdf,qt高级编程,qtquick核心编程,qt核心,qtqml核心编程,qt编程,cguiqt4编程,24小时学通qt编程,qt5编程入门pdf

11 Qt 模板库 Qt 模板库(QT Template Library 简称QTL )是一套提供对象容器的模板。如果你的编译器没有适当的 STL (标准模板库)可用,QTL 将被代替使用。QTL 提供了对象的链表、对象的矢量(动态数组)、从一个 类型到另一个类型的映射(或称为字典)和相关的迭代器和算法。一个容器是包含和管理其它对象的一个对 象,并且提供迭代器对被包含的对象进行访问。 Qt 模板类说明如表2。 表2 Qt 模板类说明 模板类名称 说明 QMap 提供基于值的一个字典的模板类 QMapConstIterator QMap 的常量迭代器 QMapIterator QMap 的迭代器 QPair 提供基于值的一对元素的模板类 QValueList 提供基于值的一个双向链表的模板类 QValueListConstIterator QValueList 的常量迭代器 QValueListIterator QValueList 的迭代器 QValueStack 提供基于值的一个堆栈模板类 QValueVector 提供基于值的一个动态数组模板类 QTL 类的命名约定与其他Qt 类一致(比如,count()、isEmpty() )。它们还提供额外的函数来兼容STL 算法, 比如size()和empty()。可以像使 STL 的函数map 一样来使用它们。 与STL 相比,QTL 仅仅包含了STL 容器应用程序接口的最重要的特性,没有平台差异,通常要慢一些并且 经常扩展为更少的对象代码。 如果你不想拷贝存储对象,你最好使 QPtrCollection 及派生类。它们就是被设计用来处理各种类指针的。 QObject 没有拷贝构造函数,因此 QObject 不能作为一个值使用。但可以存储指向QObject 的指针到 QValueList。当然,直接使 QPtrList 更好。 QPtrList 像所有其它的基于QPtrCollection 的容器一样,提供 了比速度优化了、基于值的容器更多健全的检查。 如果你有一些使用值的对象,并且在你的目标平台没有可用的STL ,Qt 模板库就可以替代它。使用值的对象 至少需要一个拷贝构造函数、一个赋值操作符和一个默认构造函数(如:一个没有任何参数的构造函数)。 注意一个快速的拷贝构造函数对于容器的高性能是关键的,因为许多拷贝操作将会发生。如果你想排序你的 数据,你必须在你的数据类中实现operator()。 Qt 模板库是为高性能而设计,迭代器是非常快的。为了实现这样的性能,Qt 模板库比基于QPtrCollection 的 集合类做更少的错误检查。一个 QTL 容器,例如:QTL 容器没有跟踪任何相关的迭代器。这样在诸如删除 条目时没有执行有效性检查,但它提供了很好的执行性能。 11.1 迭代器(Iterators ) Qt 模板库打交道的是值对象,而不是指针对象。迭代器是最好的遍历容器方法。遍历一个容器可使用像下面 的循环: typedef QValueListint List; List l; for( List::Iterator it = l.begin(); it != l.end(); ++it ) printf( Number is %i\n, *it ); begin()返回第一个元素的迭代器,end()返回的是最后一个元素之后的一个迭代器。end()标明的是一个无效 的位置,它永远不能被解除引用。它只是任何一次迭代的终止条件,迭代可以从 begin()或end()开始。同样 的概念也适用于其它容器类,例如,用于QMap 和QValueVector 的迭代方法如下: typedef QMapQString,QString Map; Map map; for( Map::iterator it = map.begin(); it != map.end(); ++it ) printf( Key=%s Data=%s\n, it.key().asc

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档