Qt5 新特性

http://www.devbean.net/2012/05/qt5-features/?replytocom=1161html

Qt 5 已经临近发布,其最大的特色就是模块化。将原来庞大的模块更细分为不一样的部分,同时,一个大版本的升级,固然少不了添加、删除各个功能类。文本简单介绍 Qt5 的特性,其具体内容来自 Qt5 官方 Wiki 的介绍git

前面说过,Qt5 最大的特性在于模块化。这么多的模块,Qt5 统称为 Qt Essentials。下面就来看看这些模块到底是什么吧!注意,有些模块没有在这里列出,例如 SQL 等。请在这里查看完整的 Qt5 模块列表。正则表达式

【2012年10月30日】重要更新数据库

根据 QTBUG-27736 作出的决定,如下模块将从 Qt 5 中移除。“移除”的含义是,这些模块将不属于 Qt 5 的一部分,可是可能会做为额外的附加功能提供。这些模块是:canvas

  • qt3d
  • qtconnectivity
  • qtfeedback
  • qtlocation
  • qtpim
  • qtsensors
  • qtsystems
  • qtwayland

所以,在阅读本文其它部分时,请注意这项最新修改!后端

Qt Core

Qt Core 相似于 Qt4 中的 QtCore 模块,包含了全部非 GUI 的功能。全部其余的 Qt 模块都基于这个模块。与 Qt4 的 QtCore 不一样之处在于,Qt Core 还包括了 XML 等 Qt4 中存在的部分。api

QStandardPaths

QStandardPaths 是 Qt4 的 QDesktopServices 的加强版,其 API 大部分基于 KDE4 的KStandardDirs。这个类提供了比 QDesktopServices 更多的功能,例如在某一存储位置搜索给定文件等。服务器

MimeTypes

QMimeDatabase 提供了判断给定文件或内存区块的 mimetype 的功能,原理是经过扩展名和(或)内容信息。网络

MIME 类型数据库由 freedesktop.org 的 shared-mime-info 项目提供。若是在当前系统上找不到 MIME 类型数据库(例如在大多数 Windows 或 Mac OS X 系统上),Qt 则使用本身的拷贝。框架

JSON 支持

QtCore 如今包含了一系列用于解析和生成 JSON 文档的类。这些类容许你在 JSON 的内存二进制表现形式和标准文本之间进行相互转换。这些类的目的固然就是提供 JSON 格式的支持。

编译器检查 signal-slot 链接

QObject 如今支持一种额外的语法,能够支持在编译期对信号槽的链接进行检查,好比 signal 和 接受者是否都存在、参数是否匹配等。目前咱们使用 C++ 模板实现了这一功能,不过当 C++11 得到全面支持以后,使用 C++11 新特性更为方便。

这种新语法容许将一个信号链接到任意 C++ 接受者上,包括 C++11 lambda 表达式,成员函数以及 static 函数。这些接受者没必要非得声明为 slots。

若是感兴趣,能够参考这篇文章获取更多信息。

兼容 Perl 的正则表达式

Qt5 新增长一个新的类 QRegularExpression,提供兼容 Perl 的正则表达式。这个类比 QRegExp 更强大,速度更快,支持更多特性,例如 lazy 和 possessive 谓词、lookbehinds、具名捕获组 named capturing groups 和循环匹配。

Qt Gui

窗口和渲染的新的类

QtGui 新增了一系列新的类,其中最重要的是 QWindow,QScreen,QSurfaceFormat 和 QOpenGLContext。这些都做为 QtWidgets 模块的后端,以及直接供 QtQuick 2 使用。

等价于 Qt4 的 QtOpenGL 模块的一系列类

在 Qt 4 的 QtOpenGL 模块中最有用的类被移动到 QtGui 模块中了,例如 QOpenGLFramebufferObject、QOpenGLShaderProgram、QOpenGLFunctions 等等。

用于替换 QGLContext 的 QOpenGLContext 则更为通用,从 QWindow 中分离出来,支持更多用例,例如为不一样界面使用相同上下文。

QOpenGLPaintDevice

咱们没有将 QWindow 和 QOpenGLFramebufferObject 做为 QPaintDevice 的子类,而是提供了一个新的 QOpenGLPaintDevice 类,使得可使用 QPainter 渲染当前边界的上下文更简单和灵活。

Qt Network

QDnsLookup

如今,使用 Qt5 提供的 QDnsLookup API 能够查询 DNS 记录了。这个类并非为了替换掉 QHostInfo,后者仍然具备根据 IP 地址获取主机名的 API。QDnsLookup 更主要的是用于其它形式的 DNS 记录,例如 SRV、TXT 以及 MX。这其实是替代了已经被废弃的 Q3Dns API。

改进对 IPv6 和 dual mode 网络的支持

许多应用程序使用主机名和网络层的透明协议来提供对 IPv6 的透明支持。绑定到 QHostAddress::Any 的 QTcpServer 和 QUdpSocket 能够同时支持 IPv4 和 IPv6 链接。

QHostAddress::AnyIPv4 和 QHostAddress::AnyIPv6 则提供了单一协议的支持。使用 QNetworkAccessManager 的外出链接则会同时尝试 IPv4 和 IPv6,直到有一个成功了。这将会帮助开发某一环境下某种协议受限状况下的程序开发。

绑定 TCP socket

QTcpSocket 如今能够在链接前绑定到某一 IP 地址,这使得在多穴环境下限制链接到特定接口成为可能。

移除 QFtp 和 QHttp API

Qt5 移除了 QHttp API,缘由是功能重复。QNetworkAccessManager 足以提供相似的功能。

Qt5 移除了 QFtp API,缘由是其实现质量。QNetworkAccessManager 能够用来提供 ftp url 的上传下载操做。

这些 API 将由某一易于迁移的独立形式提供。

SSL 证书扩展

Qt5 增长了访问 SSL 认证的扩展,这将方便 Qt 框架开发人员,同时做为将来的 Qt SSL 支持的基础。

SSL 证书验证

Qt5 增长了对 SSL 证书的验证工具链,而不只仅是当链接到 SSL 服务器时才进行的操做。

Buggy SSL 服务器的周边工做

Qt5 增长了对 buggy SSL 服务器的支持。这些修改如今已经被添加到了 Qt 4.8。

支持 opaque Private Key

这使得应用程序能够从 PKCS#11 加密狗这样的设备读取 private key,参见 http://git.iksaif.net/?p=qsslkey-p11.git;a=tree

Qt 3D

Qt 3D 是 Qt 5.0 新增模块,虽然它在实验室项目中已经存在好几年,也向 Qt 贡献了不少代码。像 QMatrix4×四、QGLShaderProgram 和 QVector3D 这些类,都是来自 Qt 3D 项目的。Qt3D 基于 QML2 和 Qt OpenGL 的支持。

Qt3D 包含两个库:

  • Qt3DQuick – 使用 QML 处理 3D 内容,基于 OpenGL
  • Qt3D – 支持 Qt3DQuick 的 C++ 类,也能够直接使用

如今,Qt3D 包含:

  • GL 渲染,包括基本的光照
  • 3D 场景管理
  • 加载 3D 资源,例如 .obj 和 .3ds 文件
  • stock 形状
  • 几何形状的加载和管理
  • 纹理和材质
  • 简单的几何动画
  • camera 和 view

上面这些特性都由 QML API 提供。结合 QML 还能够:

  • 建立内联的或者从源文件加载阴影,自动绑定到 QML 属性
  • 使用 QML scoping 建立 3D 场景
  • 将曲线动画这种声明式代码同 3D 状态结合在一块儿

Qt Location

Qt Location 是 Qt 5.0 新增模块,虽然它几年前就是 Qt Mobility 的一部分。相比于 Qt Mobility 提供的版本,Location API 则有下面的几点改变:

  • 如今的地图是 QML2 场景图的一部分,直接使用直接 OpenGL 的硬件渲染
  • 使用 MapQuickItem 能够向地图添加任意 QML2 item
  • 基于 QML model 建立支持 model-view 的地图对象
  • 内置缩放手势、剪切和加速度感应
  • 大幅提高性能,特别是大地图的多边形和通常对象
  • 支持旋转和地址匹配的完整 QML API——兼容标准的 QML model-view 设计
  • 不须要打开全部插件,便可检查全部支持的特性
  • 能够简单设置的 PluginParameters 的适用于旋转、地位、地图的赞成的“Plugin”QML 元素
  • Landmarks API 被 Places API 取代:
    • 提供相同功能的 C++ 和 QML API
    • 支持查看更加丰富的内容(例如图像、可编辑区域等)的新 API
    • 支持本地化、搜索结果、同义词的新 API
    • 支持访问 Places REST 服务的 REST 插件
    • 支持保存本地书签的 JsonDb 插件

鼠标输入

支持游戏鼠标提供的额外按键

如今,不少游戏鼠标提供了远多于左右键和滚轮的按键。Qt 应用程序能够接受来自更多鼠标按键的 Button 事件:在 XCB、XLIB 或 DirectFB 上达 27 个鼠标键;在 Wayland、Evdev 或 OS X 上达 16 个鼠标键;在 Blackberry/QNX 上达 8 个鼠标键。Qt 的 Windows 版本只能支持 5 个鼠标键,这是受 Windows 平台限制的。

QtQuick

QtQuick 2.0 是一个重大升级。

SceneGraph 渲染器

QtQuick 2 基于 OpenGL 场景。下面的类直接替换掉 QtQuick 1 中的同名类:

  • QQuickView
  • QQuickCanvas
  • QQuickItem
  • QQuickPaintedItem

改进 QML 引擎和语言

  • JS 引擎改变为 V8。
  • 处理器和编译器优化。
  • 新的绑定优化器。
  • ValueType 改进:
    • QColor 如今做为一个值类型。红、绿、蓝和 alpha 通道的值由 “r”、“g”、“b” 和 “a” 属性得到
    • 改进对 QVector4D 的支持,如今在 QML 中可使用 Qt.vector4d() 进行构建
  • 经过 Module API 能够将任意功能放置在 namespace 中。参考 qmlRegisterModuleApi()。
  • JavaScript (.js) 文件如今能够引入 QML 模块以及其余 JavaScript 文件。
  • 新增属性类型 var,淘汰旧的 variant 属性类型。var 类型的属性能够保存 JavaScript 引用。
  • QML 的属性类型 var 和 variant 能够保存 pixmap。
  • QQmlExpression 能够直接(更有效率)由 QQmlScriptString 构建。
  • 改进对特定顺序存储类型(QList<int>、QList<qreal>、QList<bool>、QList<QUrl>、QList<QString> 和 QStringList)的支持。
  • QObjects 能够为这些类型定义 Q_PROPERTY,这样就能够直接在 JavaScript 中进行访问。

Canvas

新增相似 HTML5 canvas API 的对象 Canvas,提供几点加强:

  • 支持 2 种渲染目标:Canvas.Image 和 Canvas.FramebufferObject
  • 支持后台线程渲染
  • 支持 canvas 层叠渲染

Canvas 支持大多数 HTML5 context2d API,具体细节能够查看 canvas 文档。

粒子系统

QtQuick.Particles 2.0 模块包含了能够组成 2D 粒子的元素。

元素 API/行为 的改变

  • 新增 SpriteImage 元素,用于渲染动画精灵,能够经过动画改变,它使用 Sprite 元素表现每一帧动画。
  • MouseArea 新增能够专递给 pressed 事件 clicked、doubleClicked 和 pressAndHold 等不一样类型。其顺序是在具备处理器的 MouseArea 中从上往下传递。你也能够在处理函数中忽略这些事件,让它们继续传递。这种行为经过新的属性 propagateComposedEvents 触发。
  • 绑定元素新增能够做为值来源使用;若是它的 when 属性为 false 时,也会保存任意早期的绑定。
  • Flickable:增长 dragging、draggingHorizontally 和 draggingVerically 属性。新增 topMargin、bottomMargin、leftMargin、rightMargin、xOrigin、yOrigin 属性。
  • Image 新增两个属性:horizontalAlignment 和 verticalAlignment。新增 fillMode 一个合法值 Image.Pad,表示不改变图像形状。设置 Image sourceSize.width 和 sourceSize.height 会将图像显示为指定大小,保持长宽比。
  • Grid 增长 rowSpacing 和 columnSpacing 属性。positioner 的 spacing 属性类型由整型改成浮点型。
  • positioner(Row、Column、Grid、Flow)的改进:
    • 为 add 和 move 使用的过渡改进功能:能够访问 ViewTransition 属性,可使用任意属性做为动画(不只仅是位置)。
    • positioner 中的 item 如今具备附件属性,用于定位子元素位置:Positioner.index、Positioner.isFirstItem、Positioner.isLastItem。
  • Loader 的改进:
    • 增长 active 属性,容许延迟 Loader 元素 item 属性的实例化。
    • 增长 setSource(JSObject) 函数,容许将属性初始化为特定值(相似component.createObject())
    • source 改变时发出 sourceChanged 信号;sourceComponent 改变时发出 sourceComponentChanged 信号。在前些版本,这两个属性任意一个改变时,都会同时发出这两个信号。
    • 增长 asynchronous 属性,下降组件初始化时的卡顿。
    • 若是 source 被设置为 asynchonous: true,则组件将会在后台线程编译,
  • Text 的改进:
    • 每一次增长新的行,都会调用 onLineLaidOut 处理函数。这使得咱们可以改变行的位置和大小。
    • 新政 doLayout 函数,用于从 JavaScript 触发布局。
    • 当 textFormat 设置为 AutoText 时,自动转换为 StyledText 而不是 RichText,
  • TextEdit – textFormat 属性的默认值为 PlainText 而不是 AutoText。
  • TextInput 增长 wrapMode 和 verticalAlignment 属性,同时 positionAt 函数增长一个 y 参数。
  • PathView 增长 currentItem 和 maximumFlickVelocity 属性。
  • ListView 和 GridView 的改进:
    • 当元素在 view 中增长、删除或移动时,能够应用特殊的变换。
    • 增长 headerItem 和 footerItem 属性(实例化为 header 和 footer)。
    • 在 RightToLeft 布局下,preferredHighlightBegin/End 一样倒转。
    • ListView 增长 section.labelPositioning 属性,容许将当前 section label 保持在 view 的开始处或将下一 section label 保持在 view 的结尾处。
  • 新增用于构建路径的 PathArc、PathCurve、PathSvg。

QtQuick 1 做为独立的库和模块

使用 QtQuick 1 的特定 API 编写 C++ 应用程序,例如 QDeclarativeView 或 QDeclarativeItem 必须在 .pro 文件中添加 quick1 模块,例如 QT += quick1。

QDeclarativeView 和 QDeclarativeItem 头文件如今位于 QtQuick 1模块,例如:

Language:  C++ (Qt)
0
1
#include <QtQuick1/QDeclarativeView>
#include <QtQuick1/QDeclarativeItem>
相关文章
相关标签/搜索