编辑推荐
Qt是跨平台的应用程序开发框架,支持嵌入式Linux、Mac OS X、Windows、Linux、Android、QNX、MeeGo、WebOS、Symbian等多个平台。在嵌入式Linux平台中开发的应用程序源代码——除平台附属部分外——可完全适用于Windows、Android、QNX等多种平台。
《Qt 5开发实战》面向读者
需要支持嵌入式Linux、Mac OS X、Windows、Linux、Android、QNX、MeeGo、WebOS等多种平台的开发人员
使用高级GUI、OpenGL和OpenGL ES开发3D图像应用程序的人
开发支持多线程、多媒体、网络、XML、JavaScript应用程序的读者
利用开源网页浏览器引擎WebKit开发互联网应用程序的人
开发面向后端系统管理应用程序的读者
内容简介
Qt支持C++、Python、Ruby、Perl等多种编程语言,常规用户应用程序、多媒体、后端系统管理、汽车、国防、家电、移动设备等多个领域都在广泛应用Qt。本书在全面阐述Qt基本功能的基础上,对新增的功能和服务进行了重点介绍。同时运用大量示例,集中讲解了应用程序的开发方法、技巧和必需的Qt API。读者通过实际动手操作能够迅速获得业务中的相关知识与经验,本书非常适合利用高级GUI和OpenGL ES开发3D图像应用程序的人阅读。
作者简介
金大(臣尔),计算机通信与安全专业硕士,曾开发计算机网络及安全相关软件、基于嵌入式的影像处理、Automotive、HTML5、文件系统应用软件等各类软件,目前关注面向多媒体计算环境用户的UX框架,并研究大量相关主题。著有《Qt实战编程》《MeeGo编程完美指南》等,现在负责维护Qt开发人员社区网站。
内页插图
目录
第1章 概述 1
第2章 有用的工具和qmake 6
2.1 Qt Creator IDE 6
2.2 Qt Assistant 14
2.3 Qt Designer 15
2.4 qmake 16
第3章 GUI设计与制作 19
3.1 基础控件 19
3.1.1 QCheckBox和QButtonGroup 22
3.1.2 QComboBox 25
3.1.3 QCommandLinkButton 26
3.1.4 QDate类和QDateEdit控件 27
3.1.5 QTime类和QTimeEdit控件 30
3.1.6 QDateTime类和QDateTimeEdit控件 33
3.1.7 QDial 35
3.1.8 QSpinBox和QDoubleSpinBox 36
3.1.9 QPushButton和QFocusFrame 39
3.1.10 QFontComboBox 41
3.1.11 QLabel和QLCDNumber 43
3.1.12 QLineEdit 45
3.1.13 QMenu和QMenuBar 47
3.1.14 QProgressBar 50
3.1.15 QRadioButton 51
3.1.16 QScrollArea 52
3.1.17 QScrollBar 53
3.1.18 QSizeGrip 55
3.1.19 QSlider 57
3.1.20 QTabWidget 58
3.1.21 QToolBar和QAction 60
3.1.22 QWidget 62
3.1.23 QTabBar 67
3.1.24 QToolBox 68
3.1.25 QToolButton 69
3.2 布局管理器 70
3.3 高级控件 73
3.3.1 QColumnView 74
3.3.2 QDataWidgetMapper 75
3.3.3 QDesktopWidget 77
3.3.4 QCalendarWidget 79
3.4 使用Designer构建GUI 81
3.4.1 控件和信号槽使用示例 84
3.4.2 Calculator Form示例 86
3.5 对话框 88
3.5.1 普通对话框 88
3.5.2 用户自定义对话框 97
3.6 主窗口 98
3.7 模型/视图结构和数据绑定控件 101
3.7.1 模型/视图结构 102
3.7.2 使用模型类和视图控件 103
3.8 用户自定义控件和插件 107
3.8.1 实现用户自定义控件 109
3.8.2 插件制作及布局 118
第4章 信号与槽 128
第5章 数据类型和有用的数据操作类 131
5.1 比较和判断变量的函数 133
5.2 数据类 136
5.3 容器类 154
5.4 字符串类 159
第6章 文件输入输出 163
第7章 图形 171
7.1 使用QPainter类的图形 171
7.1.1 QPainter的基本绘图 172
7.1.2 渐变 179
7.1.3 转换 182
7.1.4 组合 184
7.2 图形视图框架 185
7.2.1 图形视图架构 187
7.2.2 图形视图的坐标 190
7.2.3 图形视图的主要特点 191
7.2.4 事件处理 193
7.2.5 用户自定义QGraphicsItem 194
7.2.6 QGraphicsEffect 197
7.3 使用Qt OpenGL模块的3D 图形 202
7.3.1 用于渲染3D图形的QGLWidget类 203
7.3.2 Hello OpenGL示例 206
7.3.3 使用硬盘加速器的2D图形渲染 212
7.3.4 QPainter类的复绘 218
7.4 可缩放向量图形 224
第8章 动画框架和状态机 227
8.1 动画框架和类 228
8.2 动画和状态机 235
第9章 线程 238
9.1 QThread类 242
9.2 多线程编程 244
9.3 线程等待条件 247
9.4 使用信号量进行同步 249
9.5 使用QtConcurrent的多线程 252
第10章 容器类和迭代器类 254
10.1 Java风格的迭代器模式 255
10.2 STL风格的迭代器模式 257
10.3 使用foreach关键字访问迭代器 259
第11章 XML 261
11.1 使用数据流的XML数据处理 263
11.2 文档对象模型(DOM) 266
11.3 SAX模式 269
第12章 数据传输和网络编程 273
12.1 网络 273
12.1.1 使用QTcpSocket和QTcpServer进行TCP编程 277
12.1.2 使用QUdpSocket的UDP 285
12.1.3 主机名和DNS查询 291
12.1.4 HTTP协议 297
12.1.5 承载管理 306
12.1.6 基于服务器端/客户端的聊天示例 307
12.2 QtWebKit 314
12.2.1 QtWebKit 模块提供的类 316
12.2.2 DOM 查询 323
12.2.3 QtWebKit模块环境下的JQuery应用 325
12.2.4 QtWebKit和QObject模型间的网桥 330
12.2.5 混合客户端应用程序示例 336
12.3 进程间通信 339
12.3.1 TCP/IP 340
12.3.2 共享内存 341
12.3.3 D-Bus协议 346
12.3.4 QProcess 353
第13章 多媒体 355
13.1 音频组件 356
13.2 视频组件 359
13.3 camera组件 362
13.4 收音机组件 364
第14章 数据库 365
14.1 数据库和SQL简介 367
14.2 关联和支持数据库的驱动 369
14.3 使用SQL语句的数据库查询 377
14.4 Model类 383
14.5 列表视图应用 386
14.6 SQL 记录文件字段和GUI 控件映射 388
14.7 Cached列表示例 392
14.8 Drill Down示例 395
第15章 Qt测试框架 405
15.1 单元测试 409
15.2 数据驱动测试 410
15.3 模拟GUI事件 412
15.4 GUI事件重复测试 414
15.5 基准测试 415
第16章 Qt Quick与QML 418
16.1 Qt Quick项目创建和有用的工具 419
16.2 基本类型和扩展数据类型 421
16.3 对象 427
16.3.1 类型 428
16.3.2 定义项目属性 433
16.3.3 Repeater和Loader 436
16.3.4 转换 437
16.4 用户输入和事件处理 438
16.5 项目定位 444
16.6 State与Transition 446
16.7 动画 450
16.8 数据的显示 456
16.9 模块化编程 461
16.10 图形效果 466
16.11 有用的QML类型 489
16.12 Canvas 492
16.13 集成QML和C++ 495
16.14 多媒体 500
第17章 Qt应用程序的发布 504
17.1 多种平台下Qt应用程序的发布 504
17.1.1 Unix和Linux 504
17.1.2 Windows 505
17.1.3 Mac OS X 506
17.1.4 Android平台Qt应用程序的发布 507
前言/序言
Qt是一个跨平台的应用程序开发框架,支持嵌入式Linux、Mac OS X、Windows、Linux、Android、QNX、MeeGo、WebOS、Symbian等多个平台。例如,在嵌入式Linux平台中开发的应用程序源代码——除平台附属部分外——可完全适用于Windows、Android、QNX等多种平台。
Qt支持C++、Python、Ruby、Perl等多种编程语言,全球有近40万Qt开发人员在多种计算环境中开发各类软件。因此,常规用户应用程序、多媒体、后端系统管理、汽车、国防、家电、移动设备等多个领域都在广泛应用Qt。
近年来,开发环境中充斥着各种平台,在这种条件下开发可支持多平台的应用程序并非易事。例如,如果要开发一种可同时适用于Android和iPhone这两种不同移动设备平台的应用程序,就需要投入大量时间。
但若使用Qt则可以开发出一种不改变源代码亦可适用于多种平台的应用程序,这样可大大缩短应用程序的开发时间。因此,我认为Qt是一个可适应突变的市场环境,并具有强大竞争力的应用程序开发框架。
父母的爱是培养优秀子女的基础,各位读者就是我的衣食父母。因此,我要向一直喜爱我的读者致以最诚挚的感谢。希望本书可以给各位读者带来些许帮助。同时,向促成本书出版的出版社负责人员致以衷心的感谢。
金大(臣尔) 敬上
揭秘软件开发:从创意到实现的全方位指南 本书是一本面向广大软件开发爱好者的实用技术指南,旨在帮助读者深入理解软件开发的全过程,掌握现代软件工程的核心理念与技术实践。我们不拘泥于特定的编程语言或框架,而是致力于构建一个涵盖软件生命周期各个阶段的完整知识体系。从最初的需求分析到最终的产品交付与维护,本书将带领你一步步探索软件开发的奥秘,助你成为一名更全面、更优秀的开发者。 第一部分:软件开发的基石——理解与规划 在进入纷繁复杂的编码世界之前,扎实的理论基础与清晰的规划至关重要。本部分将深入剖析软件开发的前期准备工作,让你在动笔之前就能胸有成竹。 需求分析与用户研究: 任何成功的软件都源于对用户需求的深刻洞察。我们将探讨如何进行有效的需求收集,包括访谈、问卷调查、用户故事绘制等方法。更重要的是,我们会引导你思考如何从表层需求挖掘用户潜在的痛点和期望,从而设计出真正解决问题、满足用户需求的产品。我们将学习如何区分“想要”和“需要”,以及如何将模糊的用户期望转化为清晰、可执行的功能列表。 项目管理与敏捷开发: 软件项目往往规模庞大、周期漫长,缺乏有效的管理将导致混乱和失败。本部分将介绍经典的瀑布模型以及当前主流的敏捷开发方法,如Scrum和Kanban。我们将重点讲解敏捷开发的核心原则,包括迭代开发、持续反馈、团队协作以及拥抱变化。你将了解到如何在小步快跑中快速验证想法,如何有效地进行冲刺规划、每日站会、评审会议和回顾会议,从而提高开发效率和产品质量。 系统设计与架构: 在需求明确之后,我们就需要设计软件的骨架。我们将从高层次的角度审视系统设计,介绍模块化、解耦、高内聚低耦合等设计原则。对于大型系统,架构设计更是重中之重。我们将探讨不同的架构模式,如微服务架构、事件驱动架构、分层架构等,分析它们各自的优缺点以及适用场景。学习如何根据业务需求选择合适的架构,并理解如何设计可扩展、可维护、高性能的系统。 版本控制与协作: 现代软件开发离不开高效的版本控制系统,Git是目前最广泛使用的工具。本部分将全面讲解Git的基本操作,包括提交、分支、合并、回滚等。更重要的是,我们将深入探讨Git的工作流程,如Git Flow、GitHub Flow等,以及如何利用GitHub、GitLab等平台进行团队协作,实现代码的并行开发、审查和集成。掌握版本控制不仅能保证代码的安全,更是团队高效协作的基石。 第二部分:软件开发的实践——编码与实现 有了坚实的理论基础和清晰的规划,接下来就是将想法转化为现实的编码过程。本部分将聚焦于软件开发的具体实践,从代码编写到测试验证。 高质量代码的编写: “代码是写给人看的,顺便给机器执行。”我们将强调编写清晰、简洁、易读、易维护的代码的重要性。学习代码规范、命名约定、注释策略,以及如何利用设计模式来组织代码,提高代码的可复用性和可扩展性。我们将探讨如何避免常见的代码坏味道,并介绍代码重构的原则和技巧,让你的代码更加优雅健壮。 数据结构与算法: 它们是软件开发的核心。本部分将系统回顾常用的数据结构,如数组、链表、栈、队列、树、图、哈希表等,并深入分析它们的特性、操作以及时间、空间复杂度。同时,我们也会讲解经典的算法,如排序算法、查找算法、图遍历算法、动态规划等,并指导你如何根据实际问题选择最优的数据结构和算法,从而编写出高效的程序。 API设计与集成: 现代软件往往是相互协作的。我们将深入探讨API(应用程序编程接口)的设计原则,包括RESTful API的设计规范,如何设计具有良好可用性、安全性和可维护性的接口。同时,我们将学习如何使用各种工具和技术进行API的调用与集成,以及如何处理API的响应、错误和版本管理。 数据库技术: 数据是软件的灵魂。本部分将为你梳理关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB、Redis)的基础知识。你将学习SQL查询语言,掌握数据库的设计范式,了解索引、事务、并发控制等重要概念。同时,我们也会介绍如何选择合适的数据库,并学习如何进行高效的数据存储和检索。 软件测试: “没有测试的代码是不负责任的代码。”我们将系统介绍软件测试的各个层次,包括单元测试、集成测试、系统测试和用户验收测试。你将学习如何编写有效的测试用例,并掌握各种测试工具和框架(如JUnit, Pytest等),了解自动化测试的流程和重要性,从而大幅提升软件的质量和稳定性。 第三部分:软件开发的进阶——部署与维护 软件开发并非止于代码编写,它的生命周期还包括部署、上线以及长期的维护。本部分将带领你进入更广阔的领域。 软件部署与运维: 如何将开发完成的软件稳定地部署到生产环境,并保证其持续运行,是开发者的重要课题。我们将介绍持续集成(CI)与持续部署(CD)的概念,并介绍Docker等容器化技术,让你了解如何打包、部署和管理应用程序。同时,我们也会触及一些基础的运维知识,如服务器配置、日志分析、性能监控等。 安全性考量: 软件安全是绕不开的议题。本部分将引导你认识常见的安全威胁,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。我们将探讨如何在软件设计和开发过程中融入安全意识,采取有效的防护措施,保护用户数据和系统安全。 性能优化: 软件的性能直接影响用户体验和资源消耗。我们将学习如何识别性能瓶颈,并介绍各种性能优化的方法,包括算法优化、数据库优化、缓存策略、并发处理等。你将了解到如何通过性能测试和监控工具来评估和提升软件的响应速度和吞吐量。 软件维护与演进: 软件上线只是一个新的开始,长期的维护和迭代是软件生命周期的重要组成部分。我们将探讨如何处理用户反馈、修复Bug、发布新版本。同时,我们也会关注软件的演进,学习如何进行技术升级,如何应对不断变化的需求,让软件能够持续地为用户创造价值。 本书的价值与展望: 本书旨在为你提供一套系统性的软件开发知识体系,让你能够从宏观到微观,全面地掌握软件开发的各个环节。我们强调理论与实践相结合,通过大量的实例和深入的剖析,帮助你理解“为什么”以及“怎么做”。无论你是初学者渴望入门,还是有一定经验的开发者希望提升技能,本书都能为你提供有价值的参考和指导。 通过学习本书,你将不仅仅掌握一项或几项技术,而是能够构建起一种面向软件开发的思维方式。你将学会如何分析问题、设计解决方案、编写高质量的代码、进行有效的测试、并最终将可靠的软件交付给用户。我们希望本书能够激发你对软件开发的无限热情,并助你在技术之路上不断前行,创造出更多优秀的作品。