2020年12月,Qt 6.0发布。Qt 6是Qt的一个新的重大版本,被重新设计为面向未来的生产力平台,提供了更强大、更灵活、更精简的下一代用户体验以及无限的可扩展性。不过新推出的前期版本缺少了Qt 5.15提供的一些常用功能。直到2021年9月,Qt 6.2发布,作为Qt 6系列中第一个长期支持版本,其包含了Qt 5.15中的所有常用功能以及为Qt 6添加的新功能,从这个版本开始,大量用户开始学习并将应用转移到Qt 6。2023年4月,Qt 6.5.0发布,该版本是Qt 6系列中第二个长期支持版本,相关功能趋于完善,本书基于该版本进行编写。
Qt 6包含两种编程技术:Qt Widgets和Qt Quick。早期Qt作为C++图形用户界面应用程序开发框架,只提供了基于C++ Widgets的编程方式。为了更好地迎合移动触摸设备,Qt 4.7引入了一种全新的高级用户界面技术Qt Quick和一种声明式编程语言QML,用于创建动态触摸式用户界面和轻量级应用程序。一开始,很多初学者和开发人员因学习和使用哪种技术感到困惑,由于对Qt Quick这项新技术不熟悉,加上当时的教程案例较少,更多的人倾向于学习和使用C++ Widgets。经过十几年的发展,现在移动触摸界面已经成为主流,而Qt Widgets已经趋于完善,Qt官方也把更多精力放到了Qt Quick上。所以,如果现在开始学习Qt,那么Qt Quick是必须学习的。当然,作为Qt根基的Qt Widgets也是要学习的。而且,二者的学习不仅不会冲突,还会相互辅助,同时学习两种编程技术会起到事半功倍的效果。
本书的目标是成为一本能让读者零基础入门Qt的图书,既适合作为教材由老师讲授,又适合学生自主学习。鉴于此,本书采用了如下方式进行编写。
● Qt Widgets和Qt Quick进行同步讲解。这是本书最大的特点。Qt现在已经发展为一个庞大的系统,只通过一本书将所有内容都详细介绍到是不现实的。本书精选了初学者入门Qt需要学习的一些核心内容,并主要针对图形动画、数据模型视图、Qt图表、多媒体等常用功能模块进行详细讲解。所有内容都同步讲解了在Qt Widgets和Qt Quick中的实现方式,让读者学习一遍就能掌握两种编程技术。另外,由于两种编程技术的理念和实现方式是相通的,读者会发现,学习了其中一种实现方式,再学习另外一种会很轻松。
● 实例教学。本书内容以初学者的角度进行叙述,每个小知识点都通过从头编写一个完整的程序来讲解,即便是初学者也可以轻松上手,快速编写出自己的图形界面程序。本书尽量避免使用晦涩难懂的术语,而使用初学者易于理解的语言编写,目标是与读者进行对话,让初学者在快乐中掌握知识。
● 授之以渔。本书旨在向读者传授一种学习方法,告诉读者怎样发现问题、解决问题,怎样获取知识,而不是向读者灌输知识。本书的很多内容是基于Qt参考文档的,读者在学习时一定要多参考Qt帮助文档。本书讲解所有知识点和示例程序时,都明确标出了其在Qt帮助文档中对应的关键字,从而让内容有迹可循。
● 社区支持。本书以Qt开源社区为依托。读者可以通过论坛、邮件、QQ群、微信公众号等方式和作者零距离交流。本书对应的网络教程是持续更新的,微信公众号和社区网站还会同步更新最新的资讯和优秀教程资源。
本书适合没有Qt编程基础、有Qt编程基础但是想系统学习Qt Widgets和Qt Quick开发的读者,也适合想从Qt 5跨入Qt 6编程的读者。要学习Qt Widgets编程内容,建议有一定的C++基础,没有基础的读者可以在学习本书的同时学习C++基础知识。本书提供了丰富的课件PPT、实验讲义和程序源码,可作为高等院校相关课程的入门教材。
本书共14章,前8章是基础内容,其中第5章是重点和难点,需要读者加强学习;第9章介绍图形动画基础,学习完本章可以实现动态界面和小游戏设计;第10~12章介绍数据存储和显示、Qt图表以及Qt数据可视化等内容,因为Qt涉及的应用领域众多,本书选取了常用的数据处理来重点讲解;第13章介绍多媒体应用,其中包含音视频播放以及拍照、视频录制等内容;第14章介绍QML和C++的集成开发,学习完本章可以更好地将Qt Widgets程序和Qt Quick程序进行融合。读者可以先学习前8章的内容,然后循序渐进地学习其余章节;有Qt编程基础的读者,可以根据需要进行选择性学习。对于QML语言,读者可以在编程实践中学习。本书没有将QML语法介绍单独作为一章,而是将其放到了附录中,读者可以在需要时自行查阅。
本书还配套了精心设计的课件PPT和实验讲义。囿于篇幅,很多图片和流程性的内容无法过多展示,但是通过600余页的PPT和8组实验,对书本内容进行了扩展,例如,书中未出现的MySQL数据库的安装与使用、Android平台开发环境构建等内容,以及两个综合实例,都予以了补充。
本书为每一个知识点都设计了一个示例程序,而且列出了详细的项目构建过程,即便是初学者也可以根据书本内容轻松开发自己的应用。在学习过程中,笔者建议读者多动手,尽量自己按照步骤编写代码,当遇到自己无法解决的问题时,再去参考本书提供的源代码。每学习一个知识点,本书都会给出Qt帮助中的关键字——建议读者详细阅读Qt帮助文档,看看英文原文是如何描述的。不要害怕阅读英文文档,因为很难在网上找到所有文档的中文翻译;有时即使有中文翻译,也可能偏离原意,所以最终还是要自己去读原始文档。只要坚持,掌握了一些英文术语和关键词以后,阅读英文文档就不成问题。Qt文档非常详细,学会查看参考文档是入门Qt编程的重要一步。
为了避免使用不同的操作系统而产生不必要的问题,建议读者使用本书采用的Windows 10操作系统。这里要向对Qt版本不是很了解的读者说明一下,对于Qt程序开发,只要没有平台相关的代码,无论是在Windows系统下进行开发还是在Linux系统下进行开发,无论是进行桌面程序开发还是进行移动平台或者嵌入式平台的开发,都可以做到编写一次代码,然后分别进行编译。这也是Qt最大的特点,即所谓的“一次编写,随处编译”。当然,这一特点要求没有平台相关代码。不过,对于本书讲述的基本内容,读者只需要学好知识,然后编写代码,在不同系统使用不同的Qt版本进行移植、编译即可。
在学习本书时,推荐大家使用指定的Qt和Qt Creator版本,因为对于初学者来说,任何微小的差异都可能导致错误的理解。当然,这不是必需的。
首先要感谢王峰松老师的信任和支持,他给了我很多有益的建议和充足的时间,确保了书稿和配套内容的质量。其次要感谢那些关注和支持我的朋友,是他们的一路支持和肯定,才让我有了无穷的动力。最后要感谢曾对本书内容做出贡献的周慧宗、董世明、程梁(豆子devbean)等。得益于众多好友的帮助和支持,本书才可以在最短时间内以较高的质量呈现给广大读者。
由于作者技术水平有限,Qt 6中又是全新的技术和概念,并且没有统一的中文术语参考,因此书中难免有各种理解不当和代码设计问题,恳请读者批评指正。读者可以到Qt开源社区下载本书的源码,查看与本书对应的不断更新的系列教程,也可以与作者进行在线交流和沟通,我在Qt开源社区等待大家。
作者