跨平台的C++及UI开发库-Qt
2014-01-10 17:01:29 阿炯

Qt 是一个跨平台的C++图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。广泛用于创建图形用户界面、嵌入式系统和移动应用等;完全面向对象、易扩展,并且允许真正地组件编程。采用GPLLGPL、QPL多协议授权。

Qt is a cross-platform application and UI framework for developers using C++ or QML, a CSS & JavaScript like language. Qt Creator is the supporting Qt IDE.


Qt使用标准的C++和特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏。通过语言绑定,其他的编程语言也可以使用Qt。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:

优良的跨平台特性 Qt支持下列操作系统: Microsoft Windows 9x、2k,Linux,Solaris,HP-UX,Digital UNIX (OSF/1,Tru64),Irix,FreeBSD,BSD/OS,AIX,OS390,QNX 等等。

面向对象 Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。

丰富的 API Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。

支持图形渲染及OpenGL

大量的开发文档

XML 支持


更多关于其特性介绍,请参考这里

自从 1996 年早些时候,Qt 进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础;Qt 也是流行的 Linux 桌面环境 KDE 的基础,KDE 是所有主要的 Linux 发行版的一个标准组件。

Qt 最初是由芬兰的 TrollTech 开发的,后来卖给了诺基亚(就是曾经是著名的手机巨头诺基亚)。 2012 年,Digia 完全从诺基亚手中收购了 QT 的技术平台和知识产权。QT 背后总是得到商业公司的支持。它追求双重许可策略,一个是商业版本,另一个是免费版本。这种策略严重限制了 Qt 的用户基础,据说诺基亚在收购后已经意识到了这个问题。从 4.5 版开始,LGPL 被采用,开发人员可以基于免费的 Qt 库发布商业软件。

由于 Qt 使用非标准的 C++,因此与其他库的兼容性会出现问题,并且每个平台上的图形界面都不完全是本机 GUI,而是仅通过主题模拟系统上的标准 GUI。看起来非常相似,但是在某些地方存在明显的缺陷。Qt 执行缓慢且过大是另一个问题。另外 Qt 提供了一系列完整的文档和 RAD 工具,并提供了最完整的平台支持以及对移动终端的最完整支持。在所有 GUI 工具库中,Qt 库也是面向对象最稳定的。


发展历程

1990年 Qt 由 Haavard Nord 和 Eirik Chambe-Eng 在挪威特隆赫姆的公园长椅上构思;
1994年两人创立了Troll Tech(奇趣科技);
1995年 Troll Tech 于 5 月 20 日第一次公开发布Qt 0.90,用于 X11/Linux 。商业和开源(Free Qt 许可证);
1996年Qt 1.0发布,是当前流行的Linux桌面环境KDE的基础;
1998年Netscape5.0从Motif移植到Qt上,KDE Free Qt基金会成立,KDE/GNOME 1.0发布,保证 Qt 可用于自由软件开发;
1999年Qt2.0~2.2发布,Qt Free Edition开始使用GPL;
2000年嵌入式Qt (Qt/Embedded)发布;
2001 年Qt 3.0 发布,支持“多数据库环境、多语言、多显示器”,支持 Mac OS X 和新的 Qt Designer GUI 构建器;
2005年Qt 4.0发布,适用于所有平台甚至 Windows 的商业和 GPL 2.0(或更高版本)下的全面改造(又名兼容性中断);
2006年Troll Tech首次公开募股。GreenPhone 开发者智能手机。从夏普到摩托罗拉,全球数百万台设备采用Qt;
2008年Troll Tech被Nokia(诺基亚)收购,次年Qt源代码开放;
2009年 Qt Creator 推出,Qt 4.5 带来 LGPL v2.1;
2010 年Qt Quick 推出,Qt 4.7 中的 WebKit 集成和 Symbian 支持;
2012年诺基亚将全部Qt业务和知识产权出售给Digia公司;
2013年Digia发布了Qt 5.0,预建软件堆栈和Qt WebEngine;
2014年Digia成立子公司The Qt Company,专注于Qt技术的发展和拓展:发布跨平台的集成开发环境Qt Creator 3.1.0,同年5月发布Qt 5.3.0正式版,至此Qt实现了对iOS、Android、Windows PC端等平台的全面支持;
2015 年Qt第一次公开发布 20 周年,完成了一个 Qt 站点统一,全球 800K+ Qt 开发者;
2020年12月8日Qt 6.0发布,引入了许多新特性。


基本特性

⑴Qt的跨平台开发能力:
目标设备目标平台开发平台
计算机Windows,MacOS,桌面LinuxWindows,MacOS,桌面Linux
移动设备Android,iOS,手机windows桌面Linux,MacOS,Windows
嵌入式设备嵌入式linux,QNX,VxWorks, 嵌入式Windows桌面Linux,Windows
单片机FreeRTOS或无操作系统桌面Linux,Windows


⑵Qt的许可类型:

Qt的许可类型:商业许可:按年付费。模块更多,开发者可以不公开自己的源码。

开源许可:
①GPLv2/GPLv3许可:使用了GPL许可的Qt代码允许销售,但必须开源。GPLv3还要求公开硬件信息。
②LGPLv3许可:与GPL类似,但更宽松。若只是链接或调用GPL许可协议的Qt代码,可以不开源。

Qt近年来不太专一,Qml,Qt Quick等做了不少尝试,但这些新功能一直不温不火,有些模块做了又废弃了,比如Qt script,让模块繁多且复杂难用。

Qt商业授权不太友好,开发商业应用一定要谨慎,有公司为此付出了高额的版权费。个人开发者可以免费使用。Qt的免费版本不允许静态链接,会有版权上的限制,但开发者还是可以通过一些特殊的编译方法静态连接Qt的库的。

⑶Qt支持的开发语言:
C++和QML:
Qt对标准C++语言进行了扩展,引入了“信号”与“槽”等机制;
QML(Qt Meta Language)是用来描述应用程序界面的声明式脚本语言;
C++和QML可以混合使用。

⑷Qt6新特性:
2020年12月正式发布了Qt6.0,引入的主要新特性包括:
支持C++17标准;
Qt核心库的改动:新的数学和绑定系统,全面支持Unicode字符集,修改了Qlist的实现方式,将QVector类和Qlist类统一为Qlist类;
新的图形架构:Qt5中3D渲染依赖OpenGL,Qt6中引入了新的技术RHI(rendering hardware interface),它是一个抽象层,使得Qt可以使用平台本地化的3D图形API(Linux:Vulkan、Windows:Direct 3D、macOS:metal);
CMake构建系统:Qt6仍然支持QMake但建议使用CMake。
其他(多媒体、网络、Qt Quick 3D、Qt Design Studio等)。


更多信息可参考《QT发展记事(202x)》。

Qt版本更新录(202x)


官方主页:http://qt-project.org/