Qt是什么?

Qt 是一个跨平台的 C++ 框架(C++库),主要用来开发图形用户界面(Graphical User Interface,GUI)程序,也可以开发不带界面的命令行(Command User Interface,CUI)程序。

Qt是跨平台的,支持很多操作系统,包括电脑系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。

Qt虽然是使用的C++语言,但不是使用的标准C++,Qt进行了一定程度的“扩展”。虽然如此,但C++仍然是基础。

目前最新的版本是 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/

Qt演示视频:https://space.bilibili.com/305085009?from=search&seid=11473363199208167658

参考

https://doc.qt.io