Qt5 新特性
Qt 5 已经临近发布,其最大的特点就是模块化。将原来庞大的模块更细分为不同的部分,同时,一个大版本的升级,当然少不了添加、删除各个功能类。文本简单介绍 Qt5 的特性,其具体内容来自 Qt5 官方 Wiki 的介绍。
前面说过,Qt5 最大的特性在于模块化。这么多的模块,Qt5 统称为 Qt Essentials。下面就来看看这些模块究竟是什么吧!注意,有些模块没有在这里列出,例如 SQL 等。请在 这里查看完整的 Qt5 模块列表。
Qt Core
Qt Core 类似于 Qt4 中的 QtCore 模块,包含了所有非 GUI 的功能。所有其他的 Qt 模块都基于这个模块。与 Qt4 的 QtCore 不同之处在于,Qt Core 还包括了 XML 等 Qt4 中存在的部分。
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×4、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模块,例如:
#include <QtQuick1/QDeclarativeView>
#include <QtQuick1/QDeclarativeItem>
Qt5 新特性的更多相关文章
- QT5.9 新特性与版本回顾
原文链接: http://blog.qt.io/blog/2017/05/31/qt-5-9-released 翻译内容如下,采用的是第三方某在线翻译软件,所以有些地方不是太精确,纵然大吉做了一定的调 ...
- Qt5.7新特性
简述 Qt5.7发布了,新特性如下. 简述 新特性 C11 Support Required from the compiler New Features within existing module ...
- Qt5 中对 C++11 一些新特性的封装
在 Qt5 中,提供更多 C++11 的特性支持,接下来我们将进行详细的说明. slots (槽) 的 Lambda 表达式 Lambda表达式 是 C++11 中的一个新语法,允许定义匿名函数.匿名 ...
- 【Qt开发】Qt5 中对 C++11 一些新特性的封装
C++11 是现在的 C++ 标准的名称,C++11 为 C++ 语言带来很多新特性. 而 Qt 4.8 是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- [干货来袭]C#6.0新特性
微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...
- CSS3新特性应用之结构与布局
一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...
- 【译】Meteor 新手教程:在排行榜上添加新特性
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
随机推荐
- mac 远程连接服务器
很多刚用mac的同学 可能会纠结,连接远程服务器咋整? 有没有类型windows上的securecrt 其实,完全可以不用: mac自带的终端就可以搞定:终端terminal 如何连接远程服务器? s ...
- #研发解决方案介绍#Recsys-Evaluate(推荐评测)
郑昀 基于刘金鑫文档 最后更新于2014/12/1 关键词:recsys.推荐评测.Evaluation of Recommender System.piwik.flume.kafka.storm.r ...
- Windows Phone 8.0 SDK Update(10322) Released
昨天微软低调发布了WP 8 SDK的更新,甚至在Windows Phone Developer Blog上都没有提及. 从开发者的角度来看,此次更新的确没有太多需要关注的地方,因为没有添加新的API和 ...
- 自定义日志阅读器——包括了一个load取Tomcat日志的分析器
最近在写往公司产品里添加Tomcat适配器,以支持Tomcat.有一些功能需要摘取到Tomcat的部分日志.没有合适的工具,也不想去网上找了,就自己写了一个. 简单的画了一下设计方案: 下面直接上代码 ...
- spring定时器(一)
使用的是spring的quartz功能,需导入com.springsource.org.quartz.jar包. 此定时器无法重置定时时间,需要的话可查看:spring定时器(二) spring的be ...
- DOS命令批量重命名文件配合Excel 操作备忘
批量取得文件夹下文件名 有时候文件夹下有好多图片什么的,文件名称不是统一的格式,想统一一下,于是google找到以下方法,进入要操作的目录,按住shift键的同时,单击鼠标右键,你会看到在此处打开命令 ...
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
- 学习shell中遇到的一些基础问题总结
今天入门Shell脚本编程:今天的目标是完成冒泡排序,遇到了很多问题,总结了一下: 我从c转到shell遇到了这样的一些情况: 1:首先这几个符号非常重要 $变量:把变量的值拿出来使用(所以赋值语句应 ...
- hdu 5894 hannnnah_j’s Biological Test 组合数学
传送门:hdu 5894 hannnnah_j’s Biological Test 题目大意:n个座位,m个学生,使每个学生的间隔至少为k个座位 组合中的插空法 思路:每个学生先去掉k个空位间隔,剩下 ...
- 常用的SQL 语句
一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ...