Qt是什么?
Qt 是一个跨平台的 C++ 框架(C++库),主要用来开发图形用户界面(Graphical User Interface,GUI)程序,也可以开发不带界面的命令行(Command User Interface,CUI)程序。
Qt支持的操作系统有很多,包括操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。
目前最新的版本是 Qt5。Qt5 还包含了很多小版本,其中推荐 Qt5.6 或 Qt5.9,这两个版本是 LTS 版本(即长期支持版本),Bug较少,相对稳定。
Qt可以做什么
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
1997年,Qt 被用来开发 Linux 桌面环境 KDE,大获成功,使 Qt 成为 Linux 环境下开发 C++ GUI 程序的事实标准。
在windows操作系统上下面的程序都使用 Qt 开发:WPS、YY语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、钉钉等。
在Linux和嵌入式Qt也是主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。
Qt虽然也支持手机操作系统,但是还是不及手机平台自己的开发工具方便
总起来说,Qt 主要用于桌面程序开发和嵌入式开发。
Qt的历史
Qt最早是 1991 年由两个挪威人 Eirik Chambe-Eng 和 Haavard Nord 开发的, 他们随后于 1994 年 3 月 4 号正式成立奇趣科技公司(Trolltech)。Qt 原本是商业授权的跨平台开发库, 在 2000 年奇趣科技公司为开源社区发布了遵循 GPL(GNU General Public License)许可证的开源版本。在 2008 年,诺基亚公司收购了奇趣科技公司,并增加了 LGPL(GNU Lesser General Public License)的授权模式。因为诺基亚公司的问题,Qt 商业授权业务也于 2011 年 3 月出售给了芬兰 IT 服务公司 Digia。最后 Digia 于 2014 年 9 月宣布成立 Qt Company 全资子公司,独立运营 Qt 商业授权业务。经过 20 多年的发展,Qt 已经成为最优秀的跨平台开发框架之一,在各行各业的项目开发中得到广泛应用。
GPL 和 LGPL
GPL 授权:版本的软件一定还是 GPL 的开源软件,你用Qt写的程序必须开源
LGPL 授权:(第一个 L 可以叫 Lesser 宽松版或 Library 开发库版)。使用 Qt 官方动态链接库,不必开放商业代码。如果修改了动态链接库就必须开源。
Qt和MFC对比
Qt 已经封装了底层细节,简单易学,可以制作出精美的界面,一次编写到处运行。
MFC 只能在win上运行,这个框架只是给 Windows API 加了一层简单的包装,命名比较混乱,学习的话需要比较强的winAPI基础,以及十几年没有维护。
Qt开发过程及工具
编写C++Qt程序 -> uic根据.ui文件生成C++ 代码文件 -> moc翻译成原生c++代码文件 -> qmake根据.pro文件生成相应的 Makefile -> MinGW编译全部代码 -> 生成程序
工具 | 描述 |
---|---|
uic | User Interface Compiler,用户界面编译器,用于把.ui的xml界面描述文件翻译成c++代码文件 |
moc | Meta-Object Compiler,元对象编译器,用于把qt的特殊语法(Qt 信号/槽机制、运行时类型定义、动态属性系统)翻译成原生c++语法 |
qmake | 核心的项目构建工具,可以生成跨平台的 .pro 项目文件,并能依据不同操作系统和编译工具生成相应的 Makefile,用于构建可执行程序或链接库。 |
MinGW | windows平台下的一种c、c++语言编译器 |
rcc | Resource Compiler,资源文件编译器,负责在项目构建过程中编译 .qrc 资源文件,将资源嵌入到最终的 Qt 程序里。 |
qtcreator | 集成开发环境,包含项目生成管理、代码编辑、图形界面可视化编辑、 编译生成、程序调试、上下文帮助、版本控制系统集成等众多功能, 还支持手机和嵌入式设备的程序生成部署。 |
assistant | Qt 助手,帮助文档浏览查询工具,Qt 库所有模块和开发工具的帮助文档、示例代码等都可以检索到,是 Qt 开发必备神器,也可用于自学 Qt。 |
designer | Qt 设计师,专门用于可视化编辑图形用户界面(所见即所得),生成 .ui 文件用于 Qt 项目。 |
linguist | Qt 语言家,代码里用 tr() 宏包裹的就是可翻译的字符串,开发人员可用 lupdate 命令生成项目的待翻译字符串文件 .ts,用 linguist 翻译多国语言 .ts ,翻译完成后用 lrelease 命令生成 .qm 文件,然后就可用于多国语言界面显示。 |
特殊术语
Makefile: 即生成脚本,虽然可以直接调用编译器如 g++ 编译程序,但是如果项目里的代码文件变多了, 哪些代码文件更新了需要重新编译,哪些代码没有改不需要重新编译等等, 靠程序员自己记忆去处理是比较麻烦的事,还有哪些代码需要预处理或是链接哪些库文件, 这些都是繁杂的过程。为了规范程序的编译生成过程,产生了规范化的生成脚本,就是 Makefile , 生成器 make 可以依据规范的 Makefile 自动生成目标程序或库文件。 简单的说,就是定义好 Makefile ,让程序员只需要去关注如何编写代码, 而生成程序过程中的脏活累活都交给 make 程序。现在 Makefile 通常都有工具自动生成,如 qmake 工具, 这样就大量减轻了程序员的负担。
Project: 即项目(或叫工程),这里的项目是指为实现某个相对独立功能的程序代码合集,这些代码不单单是放在一块, 而是有相互之间的关联性,并且有专门负责管理该项目的项目文件,比如 Qt 使用 .pro 文件管理项目, VC++ 则使用 .vcproj 作为项目文件。集成开发环境通常都是依据项目文件(.pro/.vcproj)管理和构建项目。
Qt获取
中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
北京理工大学:https://mirrors.bit.edu.cn/qtproject/
中国互联网络信息中心:https://mirrors.cnnic.cn/qt/
Qt演示视频:https://space.bilibili.com/305085009?from=search&seid=11473363199208167658
参考
https://doc.qt.io/
http://c.biancheng.net/view/1792.html
https://qtguide.ustclug.org/