QT发展简史

本文由Markdown编辑器编辑而成。

1. QT基本介绍

Qt 是一个跨平台的C++应用程序开发框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。Qt使用标准的C++和特殊的代码生成扩展(称为元对象编译器Meta Object Compiler, moc)以及一些宏。

基本上,Qt 同 X11上的GTK、Motif、Openwin和Windows上的MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 支持更多的平台(包括Microsoft Windows、GNU/Linux、Mac OS X、Android、iOS、WinCE、UNIX家族等),面向对象且模块化程度更高(Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单),丰富的API(Qt 包括多达 250个以上的 C++ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理功能),支持 2D/3D 图形渲染,支持 OpenGL、大量的开发文档、XML支持等。

参考来源:https://www.oschina.net/p/qt

2. QT的发展历史

Haavard Nord和Eirik Chambe-Eng于1991年开始开发“Qt”,1994年3月4日创立公司,最早名为Quasar Technologies,然后更名为TrollTech,然后再改为Trolltech,中文名是“奇趣科技”。
2008年6月17日被NOKIA收购,以增强其在跨平台软件研发方面的实力,更名为Qt Software。
2009年5月11日,诺基亚Qt Software宣布Qt源代码管理系统面向公众开放。为了便于这些内容的管理,Qt Software启用了基于Git和Gitorious开源项目的Web源代码管理系统。
2012年8月9日,Digia宣布已完成对诺基亚Qt业务及软件技术的全面收购,并计划将Qt应用到Android、IOS及Window8平台上。

使用Qt开发的软件,相同的代码可以在任何支持的平台上编译运行,而不需要修改源代码。它会自动根据平台的不同,表现平台特有的图形界面风格。

经过多年发展,Qt不但拥有了完备的C++图形库,而且近年来的版本逐渐集成了数据库、OpenGL库、多媒体库、网路、脚本库、XML库、WebKit库等等,其核心库也加入了进程间通信、多线程等模块,极大地丰富了Qt开发大规模复杂跨平台应用程序的能力,真正意义上实现了其研发宗旨“Code Less; Create More; Deploy Anywhere.”

Qt的最新版本是2015年7月发布的Qt5.5版。

3. Qt的一些特点:

3.1 图形用户界面

Qt的图形用户界面的基础是QWidget。Qt中所有类型的GUI组件如按钮、标签、工具栏等都派生自QWidget,而QWidget本身则为QObject的子类。Widget负责接收鼠标,键盘和来自窗口系统的其他事件,并描绘了自身显示在屏幕上。每一个GUI组件都是一个widget,widget还可以作为容器,在其内包含其他Widget。

QWidget不是一个抽象类,并且可以被放置在一个已存在的用户界面中;若是Widget没有指定父Widget,当它显示时就是一个独立的视窗或是一个顶层widget。QWidget显示能力包含了透明化及Double-Buffering。Qt提供一种托管机制,当Widget于创建时指定父对象,就可把自己的生命周期交给上层对象管理,当上层对象被释放时,自己也被释放。确保对象不再使用时都会被删除。

3.2 信号与槽机制(Signals and Slots)

Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发射一个信号(signal);而槽(slot)则是一个函数接受特定信号并且运行槽本身设置的动作。信号与槽之间,则通过QObject的静态方法connect来链接。

信号在任何运行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。

以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确类型的参数。但信号和其接受的槽之间传递的数据类型必须要相符合,否则编译器会提出警告。信号和槽可接受任何数量、任何类型的参数,所以信号与槽机制是完全类型安全。

信号与槽机制也确保了低耦合性,发送信号的类并不知道是哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在”连接”信号和槽时,槽会接受信号的参数并且正确运行。

3.3 布局管理

布局管理类用于描述一个应用程序的用户界面中的Widget是如何放置。当视窗缩放时,布局管理器会自动调整widget的大小、位置或是字号,确保他们相对的排列和用户界面整体仍然保有可用性。

Qt内置的布局管理类型有:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。这些类继承自QLayout,但QLayout非继承自QWidget而是直接源于QObject。他们负责widget的几何管理。想要创建更复杂的版面配置,可以继承QLayout来自定义版面配置管理员。

3.4 Main Window

Qt提供了下列主视窗管理和相关的用户界面组件的类:

QMainWindow:提供一个标准的应用程序主视窗。当中可以包括菜单、工具栏、状态栏、停驻组件等组件。
QDockWidget:提供了一个可用于创建弹簧工具调色板或辅助窗口的widget。Dock widgets可以移、关闭、浮动为外部视窗。
QToolBar:提供了一个通用的工具栏widget,可以放入一些不同的action有关的工具,如按钮、下拉菜单、comboboxes和spin boxes。

4. 基于Qt开发的产品

(1)3D Slicer: a free open source software for visualization and medical image computing;(是一个基于VTK的开源的可视化和医学影像计算的软件)
(2)ParaView: 也是一个基于VTK的数据可视化的工具软件,在流体力学、空气动力学、生物医学、统计学等有数据可视化需求的领域中发挥重要的作用;
(3)Google Earth: Google开发的一款三维虚拟地图软件;
(4)Opera: 著名的网页浏览器,在欧洲的市场占有率很高;
(5)Qt Creator: the free software cross-platform integrated development environment from Nokia;(是由诺基亚开发的一个可以跨平台的集成IDE)
(6)Skype: 一个基于P2P的VOIP聊天软件;
(7)VirtualBox: Oracle开发的虚拟机软件;
(8)YY语音:是一个可以进行在线多人语音聊天和语音会议的免费软件,在中国拥有庞大的用户群;
(9)咪咕音乐:是中国移动倾力打造的正版音乐播放器。
(10)WPS Office: 金山公司(Kingsoft)出品的办公软件,与微软Office兼容性良好。

参考来源:
https://zh.wikipedia.org/wiki/Qt

QT学习资源:

  1. 《Qt学习之路2》:这是网上非常全面的一个Qt的学习教程:
    http://www.devbean.net/2012/08/qt-study-road-2-catelog/

你可能感兴趣的:(C++,qt,跨平台)