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
所以,在阅读本文其它部分时,请注意这项最新修改!后端
Qt Core 相似于 Qt4 中的 QtCore 模块,包含了全部非 GUI 的功能。全部其余的 Qt 模块都基于这个模块。与 Qt4 的 QtCore 不一样之处在于,Qt Core 还包括了 XML 等 Qt4 中存在的部分。api
QStandardPaths 是 Qt4 的 QDesktopServices 的加强版,其 API 大部分基于 KDE4 的KStandardDirs。这个类提供了比 QDesktopServices 更多的功能,例如在某一存储位置搜索给定文件等。服务器
QMimeDatabase 提供了判断给定文件或内存区块的 mimetype 的功能,原理是经过扩展名和(或)内容信息。网络
MIME 类型数据库由 freedesktop.org 的 shared-mime-info 项目提供。若是在当前系统上找不到 MIME 类型数据库(例如在大多数 Windows 或 Mac OS X 系统上),Qt 则使用本身的拷贝。框架
QtCore 如今包含了一系列用于解析和生成 JSON 文档的类。这些类容许你在 JSON 的内存二进制表现形式和标准文本之间进行相互转换。这些类的目的固然就是提供 JSON 格式的支持。
QObject 如今支持一种额外的语法,能够支持在编译期对信号槽的链接进行检查,好比 signal 和 接受者是否都存在、参数是否匹配等。目前咱们使用 C++ 模板实现了这一功能,不过当 C++11 得到全面支持以后,使用 C++11 新特性更为方便。
这种新语法容许将一个信号链接到任意 C++ 接受者上,包括 C++11 lambda 表达式,成员函数以及 static 函数。这些接受者没必要非得声明为 slots。
若是感兴趣,能够参考这篇文章获取更多信息。
Qt5 新增长一个新的类 QRegularExpression,提供兼容 Perl 的正则表达式。这个类比 QRegExp 更强大,速度更快,支持更多特性,例如 lazy 和 possessive 谓词、lookbehinds、具名捕获组 named capturing groups 和循环匹配。
QtGui 新增了一系列新的类,其中最重要的是 QWindow,QScreen,QSurfaceFormat 和 QOpenGLContext。这些都做为 QtWidgets 模块的后端,以及直接供 QtQuick 2 使用。
在 Qt 4 的 QtOpenGL 模块中最有用的类被移动到 QtGui 模块中了,例如 QOpenGLFramebufferObject、QOpenGLShaderProgram、QOpenGLFunctions 等等。
用于替换 QGLContext 的 QOpenGLContext 则更为通用,从 QWindow 中分离出来,支持更多用例,例如为不一样界面使用相同上下文。
咱们没有将 QWindow 和 QOpenGLFramebufferObject 做为 QPaintDevice 的子类,而是提供了一个新的 QOpenGLPaintDevice 类,使得可使用 QPainter 渲染当前边界的上下文更简单和灵活。
如今,使用 Qt5 提供的 QDnsLookup API 能够查询 DNS 记录了。这个类并非为了替换掉 QHostInfo,后者仍然具备根据 IP 地址获取主机名的 API。QDnsLookup 更主要的是用于其它形式的 DNS 记录,例如 SRV、TXT 以及 MX。这其实是替代了已经被废弃的 Q3Dns API。
许多应用程序使用主机名和网络层的透明协议来提供对 IPv6 的透明支持。绑定到 QHostAddress::Any 的 QTcpServer 和 QUdpSocket 能够同时支持 IPv4 和 IPv6 链接。
QHostAddress::AnyIPv4 和 QHostAddress::AnyIPv6 则提供了单一协议的支持。使用 QNetworkAccessManager 的外出链接则会同时尝试 IPv4 和 IPv6,直到有一个成功了。这将会帮助开发某一环境下某种协议受限状况下的程序开发。
QTcpSocket 如今能够在链接前绑定到某一 IP 地址,这使得在多穴环境下限制链接到特定接口成为可能。
Qt5 移除了 QHttp API,缘由是功能重复。QNetworkAccessManager 足以提供相似的功能。
Qt5 移除了 QFtp API,缘由是其实现质量。QNetworkAccessManager 能够用来提供 ftp url 的上传下载操做。
这些 API 将由某一易于迁移的独立形式提供。
Qt5 增长了访问 SSL 认证的扩展,这将方便 Qt 框架开发人员,同时做为将来的 Qt SSL 支持的基础。
Qt5 增长了对 SSL 证书的验证工具链,而不只仅是当链接到 SSL 服务器时才进行的操做。
Qt5 增长了对 buggy SSL 服务器的支持。这些修改如今已经被添加到了 Qt 4.8。
这使得应用程序能够从 PKCS#11 加密狗这样的设备读取 private key,参见 http://git.iksaif.net/?p=qsslkey-p11.git;a=tree。
Qt 3D 是 Qt 5.0 新增模块,虽然它在实验室项目中已经存在好几年,也向 Qt 贡献了不少代码。像 QMatrix4×四、QGLShaderProgram 和 QVector3D 这些类,都是来自 Qt 3D 项目的。Qt3D 基于 QML2 和 Qt OpenGL 的支持。
Qt3D 包含两个库:
如今,Qt3D 包含:
上面这些特性都由 QML API 提供。结合 QML 还能够:
Qt Location 是 Qt 5.0 新增模块,虽然它几年前就是 Qt Mobility 的一部分。相比于 Qt Mobility 提供的版本,Location API 则有下面的几点改变:
如今,不少游戏鼠标提供了远多于左右键和滚轮的按键。Qt 应用程序能够接受来自更多鼠标按键的 Button 事件:在 XCB、XLIB 或 DirectFB 上达 27 个鼠标键;在 Wayland、Evdev 或 OS X 上达 16 个鼠标键;在 Blackberry/QNX 上达 8 个鼠标键。Qt 的 Windows 版本只能支持 5 个鼠标键,这是受 Windows 平台限制的。
QtQuick 2.0 是一个重大升级。
QtQuick 2 基于 OpenGL 场景。下面的类直接替换掉 QtQuick 1 中的同名类:
新增相似 HTML5 canvas API 的对象 Canvas,提供几点加强:
Canvas 支持大多数 HTML5 context2d API,具体细节能够查看 canvas 文档。
QtQuick.Particles 2.0 模块包含了能够组成 2D 粒子的元素。
使用 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> |