Qt 5简介
Qt 5概要介绍
在Qt 5这个版本中,Qt Quick成为了Qt的核心。但是Qt 5也继续提供了本地C++强大的功能来完成更好的用户体验,也提供了对OpenGL/OpenGL ES图形加速的完全支持。
Qt 5是自2005年发布的Qt 4.x系列之后的第一个做出大改动的版本。这次的改变主要是使得Qt更加适应未来的需求。
Qt 5.0版本发布了完整的SDK,覆盖了Windows、Mac OS X以及Linux。这表明Qt 5.0版本发布的内容包括:Qt 5框架、IDE(Qt Creator)、示例以及文档。
Qt 5的成功源于Qt 4,因此Qt尽可能的兼容Qt 4.x系列。
Qt 5在架构上清除了内部的一些设计,并且使得Qt 5更加的模块化,更容易学习,更加快速。Qt 4.x系列的应用程序只需要做很少的改变以及简单的用Qt 5重新编译一下即可支持Qt 5。
Qt 5的一些包(主要是开发框架)是随着Qt Creator 2.6.1版本发布的,该版本的Qt Creator也是使用Qt 5编译的。
距离Qt 4发布已经过去7年了,并且目前Qt 4还在停留在主要的分支Qt 4.8版本。
现在Qt第5个大的版本发布了,提供了4个主要的特性:
(1) 令人惊奇的图像处理和表现能力:特别是在特定的环境下,例如:嵌入式和 移动设备上。Qt Quick 2提供了基于Open GL的场景视图,一个粒子系统以及一些渲染特效的集合。Qt Multimedia和Qt GraphicalEffects更加促进了这些特性。
(2) 开发者的生产力和灵活性:使得JavaScript和QML成为一等公民,同时也继续保留了以C++作为基础以及对Qt Widget的支持。附加的Qt WebKit2使得HTML5的开发者更加轻松。
(3) 跨平台的可移植性:由于Qt的核心模块和附加模块使用了新的结构,以及QPA的合并,使得OS开发者的开发工作更加容易了。最终的目标就是使得Qt可以在所有的环境下运行。下一步的工作就是在iOS和Android上提供完整的Qt支持,这个工作已经开始。
(4) 开放式的开发以及开放式的管理确保了更加广泛的开发者开发和测试Qt 5。
Qt 5包含如下模块:
核心模块:Qt Core,Qt GUI,Qt Multimedia,Qt Netword,Qt Qml,Qt Quick,Qt SQL,Qt Test,Qt WebKit,Qt WebKit Widgets,Qt Widgets。
附加模块:Qt D-Bus,Qt Graphical Effects,Qt ImageFormats,Qt OpenGL,Qt Print Support,Qt Declarative,Qt Script,Qt Script Tools,Qt SVG,Qt XML,Qt XML Patterns。
说明:
Qt的核心模块定义了Qt在所有平台上的基础。它们在Qt所支持的所有开发平台以及测试的目标平台上都是可获取的。它们在Qt 5期间都会保持源代码以及二进制兼容。核心模块对大多数的Qt应用都是通用且有用的。为某一个特定目的实现的模块都放在了Qt的附加模块中,即使这个模块 在所有支持的平台上都可获取。
Qt的核心模块列表如下:
Qt的附加模块为某些特定的目的带来了额外的价值。这些模块也许只是在某些开发平台或者目标平台上可用。这些模块中的一部分可能只包含在Qt针对某些特定平台的发行版本中。
Qt的附加模块列表如下:
接下来在介绍一下Qt的工具部分。
开发Qt应用程序使用到的工具是作为Qt的一部分随Qt版本一起发布的。官方发布的工具支持所有的开发平台。
Qt的工具列表如下:
Qt 5包含的新特性
接下来,我们看看Qt 5都包含哪些新的特性,主要的新特性如下表:
现在我们来逐条详述这些新的特性:
(1) Amazing Graphics Capability andPerformance
Qt 5使用基于OpenGL的场景视图来加速Qt Quick的图像,使得即使是在硬件受限的移动和嵌入式设备中,用户界面也可以使用动画、图像效果以及粒子系统。
渲染引擎架构的改变所获得的好处也可以从以下示例看出来:
(2) Qt Quick in Qt 5
Qt Quick为开发QML应用程序提供了必需的基础部件。该技术的最新版本(v2.0)同样引进了一系列的C++类作为Qt Quick 1中QDeclarative等价类的代替物。Qt Quick中新的特性包括:
*Canvas:Canvas提供了类似HTML5中Canvas的API,以及一些额外的特性;
*Shader Effects:该特性允许GLSL的渲染器可以被集成到QML中,并被应用在界面组件以及图像上;
*Particle Effects:用于创建一个多样化的2D粒子系统;
*Sprites:它可以在2D动画对象中使用,并且可以作为粒子系统的源;
*离线存储:离线存储是HTML5Web数据库API,在Qt 5中它是JavaScript API用于在Qt Quick应用程序中存储数据;
*Window:Window提供了顶层的窗口以及屏幕类型用于获取屏幕的分辨率和其它的细节。这在使用Qt Quick开发桌面程序十分有用;
*新的渲染架构:对性能进行优化的基于OpenGL的新的渲染架构。
Qt Graphical Effects模块提供了一系列可应用在Qt Quick应用程序中的ready-made效果,包括soft drop shadow,blur,gow以及colorize。
(3) WebKit and HTML5
Qt
WebKit是基于开源的WebKit项目的一个web内容渲染引擎。WebKit广泛的支持标准的web技术。Qt 的WebKit模块提供了与Qt
Quick和传统的widgets的集成。该模块将最新的HTML5的优势集成到Qt
5中,这些优势包括:CSS过滤器、动画、视频、Canvas、WebGL以及HTML视频。
(4) Multimedia
Qt的Multimedia提供了非常多的QML类型和C++类用以处理多媒体内容。它同样提供了必需的API用于获取摄像头和收音机功能。Qt 5将Qt Multimedia模块放在了核心模块中,因此它支持所有主要平台。
(5) Modularized Qt Libraries
Qt 5将Qt库分割到几个特定的库和模块中。这意味着一个应用程序可以选择它需要的库来使用、编译和部署。
对于Qt模块的列表在前面已经介绍过了。
(6) Widgets in Qt 5
在Qt 5中Qt Widgets已经被划分为一个单独的模块了。它也是核心模块之一。
(7) Qt Platform Abstraction
Qt中对于窗口系统依赖的部分已经在Qt5中被完全重写了,基于Qt Platform Abstraction:一个插件架构,允许Qt动态的加载它所处于的窗口系统。这将提供以下几点好处:
*使得窗口系统集成的基础代码处于中心,可以被所有平台重用;
*简化将Qt移植到一个新平台所要做的工作;
*将对窗口系统的依赖从Qt中移除,使得在多个窗口系统下运行的Qt程序的二进制保持一致成为可能。例如:QtLinux二进制文件可以运行在X11和Wayland上。
(8) New Connection Syntax
除了众所周知且依然可用的连接信号和槽的方式外,对QObject::connect新的重载已经添加到Qt5中,新的语法允许使用指向成员函数的指针来连接信号和槽:
新的语法提供了对信号和槽的兼容性的编译时检查;如果在参数类型之间存在隐式转换,那么这种转换就会自动执行;新的语法也能解决由于typedef或namespaces引起的许多问题。
另外,如果你的编译器支持C++11,你甚至可以直接(将信号)连接到一个lambda函数:
(9) Connectivity and Networking
Qt
5提供了对IPv6更好的支持以及两种模式的网络。绝大多数的应用程序使用主机名和网络层传输协议现在可以获取IPv6的传输支持。这些应用程序可以选择
同时接受IPv4和IPv6的连接或者是仅仅绑定到两种连接类型中的一种。在使用QNetworkAccessManager发出的HTTP连接
中,IPv4和IPv6连接是并行尝试,并且最先连接成功的那个就投入使用。这对于在这两种连接类型中的一种被限制连接的环境特别有用。
Qt 5同样提供了更好的方式来处理基于套接字的TCP连接以及SSL认证。这意味着开发者现在可以:
*在连接建立之前将一个TCP套接字绑定到一个IP上;
*校验SSL认证链;
*访问遗留系统
严格的客户端认证是许多处理关键数据的应用程序首要考虑的问题。在Qt 5中支持的不透明的私匙使得应用可以从蛇虫中读取私匙,例如:PKCS#11软件保护器用于严格的客户端认证。Qsslkeyexample示范了从设备中读取私匙。
(10) JSON Support
那些使用简单数据结构存储少量数据的Qt应用程序现在可以选择使用处于复杂数据库后端(需要必需的驱动或者插件访问数据)上层的JSON文档。JSON是从JavaScript衍生出来的基于文本模式的开放标准,这使得它成为了QML应用程序的首选。
Qt Core提供了一系列的类用于解析和生成JSON文档。这些类同样允许你在存于内存中的JSON数据和标准的JSON格式的文档之间进行转换。目标是使得对JSON的同样操作能更加快速。
(11) User Input
Qt 4已经在C++中提供了对多点触控输入的处理。Qt 5将这种支持扩展到了Qt Quick中,包括了触点的所有信息:触点位置、压力以及速度。
在Qt 5中,鼠标事件的处理在它的预处理器中被加强了。在Qt Quick中,应用程序对于处理鼠标事件有着更多的控制权。在QML文档中的鼠标区域可以传递鼠标滚轮和点击事件,同样也可以忽略传递的时间。
除了这些,Qt 5在支持多鼠标按键的平台上也添加了对多鼠标按键的支持。这主要是为了支持使用Qt开发游戏应用的场景。