qt5开发及实例_Qt6各大模块变更概览:旨在成为未来主要开发平台

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt6最新试用版>>

Qt 6的产品使命是使Qt成为未来的开发平台。作为Qt的主要版本,Qt 6.0提供了更高的自由度来实现新功能,新功能以及更好地支持当前和未来的需求。Qt 6.0是Qt 5系列的延续,对用户迁移不会造成破坏。

在创建Qt 6时,我们特别希望确保Qt为我们的客户和用户所拥有的核心价值得到遵守:

  • 它具有跨平台的特性,允许用户使用一种技术并从一个代码库将其应用程序部署到所有台式机,移动和嵌入式平台
  • 从低端,单用途设备到高端复杂台式机应用程序或连接系统的可扩展性
  • 世界一流的API,工具和文档,简化了应用程序和设备的创建
  • 可维护性,稳定性和兼容性,可轻松维护大型代码库
  • 拥有超过150万用户的大型开发者生态系统

Qt 6.0是Qt 6系列的第一个版本,旨在满足新的市场需求,同时将核心价值放在我们所做工作的核心。

内容

  • 1个移植指南
  • 2变更概述
  • 3新功能(在现有模块中)
    • 3.1Qt并发
    • 3.2Qt核心
    • 3.3Qt DBus
    • 3.4Qt Gui
    • 3.5Qt网络
    • 3.6Qt QML
    • 3.7Qt快速
    • 3.8Qt Quick 3D
    • 3.9Qt快速控制
    • 3.10Qt Wayland合成器
    • 3.11Qt SQL
    • 3.12Qt测试
    • 3.13Qt XML
    • 3.14Qt SVG
    • 3.15Qt OpenGL
    • 3.16Qt小部件
    • 3.17Qt PrintSupport
  • 4新模块
  • 5平台变更
    • 5.1所有
    • 5.2的Linux
    • 5.3苹果系统
    • 5.4视窗
    • 5.5安卓
  • 6卸下的模块
  • 7通过程序包管理器可用的其他模块

移植指南

在创建Qt 6时,我们的目标是保持与Qt 5的尽可能多的兼容性,但是为了使Qt成为更好的框架,不可避免地需要进行一些更改。为了更轻松地移植到Qt 6.0,我们创建了移植指南来总结这些更改并提供处理这些更改的指南。在指南中,您可以找到有关可能会影响您的应用程序并帮助您从Qt 5过渡到Qt 6的更改的文章的链接。

变更概述

Qt 6.0中的主要更改包括:

  • 利用C ++ 17
  • 下一代QML
  • 新的图形架构
  • Qt Quick的统一2D和3D
  • CMake构建系统(应用程序仍支持qmake)
  • 贯穿多项改进

Qt 6.0的重点是最常用的模块,因此Qt 6.0尚不提供许多附加组件。

新功能(在现有模块中)

已经进行了很多清理,并且我们删除了许多不推荐使用的方法。 由QDoc根据代码自动生成的Qt 6文档快照页面包括“过时的类”和“新的类和函数”列表。

Qt并发

  • QtConcurrent :: run()已得到改进,可以使用可变数量的参数

Qt核心

  • 类的变更
    • QByteArrayView现在提供了一种轻量级的方法来查看QByteArray或其他等效于字符的数组数据的内容
    • QStringView获得了多个API改进
    • QUtf8StringView引用UTF-8字符串的连续部分,而不必构造QString或QByteArray
    • QAnyStringView引用以下任何编码的字符串:UTF-8,UTF-16和Latin-1。
    • QStringRef已移至新的Qt Core5Compat模块。
  • QPromise允许设置QFuture的值,进度和异常
  • QFuture支持附加延续
  • QStateMachine已从Qt Core中删除,并将在以后的Qt版本中返回(很可能是Qt SCXML模块的一部分)
  • 现在可以将信号转换为QFuture对象
  • QVector和QList是统一的。QList已更新,并且在需要类似数组的行为时应默认使用
  • QList,QString和QByteArray现在具有优化的开头插入复杂性(也称为prepend)
  • Q_DECLARE_TYPEINFO()机制已简化:
    • 普通可复制和普通可破坏的类型将自动视为可重定位(Q_RELOCATABLE_TYPE)
    • Q_MOVABLE_TYPE和Q_RELOCATABLE_TYPE表示同一件事
  • 容器类现在使用qsizetype作为大小和索引的基础类型。另外,以类似的方式更新了几个相关的类(例如QTextBoundaryFinder和QRegularExpression)。此更改允许容器在64位平台上容纳2 ^ 31个以上的项目
  • QLocale的改进,主要围绕数字格式(加上大量清理工作)。
    • 现在,一些返回QChar的方法返回QString来处理语言环境,在该语言环境中,相关的“单个字符”由Unicode的BMP(基本多语言平面)外部的代码点表示;也就是说,他们在UTF-16中使用代理对,因此Qt使用两个编码单元,而不是一个。
    • 这样就可以在数字不在BMP中的语言环境中支持数字格式和解析,从而现在可以在CLDR拥有数据的语言环境中包括这些语言环境。
    • 更正数字分组(也称为“千位分隔符”的位置,但…除外),以便正确覆盖除三位以外的其他分组的语言环境,并且如果前面的位数太少(如某些要求),则省略前导分隔符语言环境(例如西班牙语)。
    • 将会计格式用于货币数量(如果可用),从而改善对负货币数量的特定于区域设置的表示的支持。
  • QHash和相关类得到了改进
    • 对于自定义类型,QHash和QMultiHash依赖于您在同一名称空间中提供自定义qHash()函数。在Qt 4和Qt 5中,qHash函数的返回值和可选的第二个参数的类型为uint。在Qt 6中,它是size_t。
    • Qt 6中QHash和QMultiHash的实现从基于节点的方法更改为两阶段查找表
    • QMultiHash不再派生自QHash。QHash:insertMulti()随后被删除。
  • 通过将单个命令字符串拆分为程序名称和参数来解释单个命令字符串的QProcess :: start()重载被重命名为QProcess :: startCommand()
  • 元类型系统和QVariant已得到改进。重点包括在编译时从任何类型创建QMetaType的能力,对内置类型和用户类型的统一处理以及QVariant更快。

Qt DBus

  • QDBusPendingReply已更改为可变参数模板类,以便现在支持8个以上的模板参数
  • QDBusConnection :: sender()函数已被删除。
  • QHash,QMap和QList的QDBusArgument :: operator <<()专长已统一为关联容器的常见专长
  • 具有固定大小的参数的QDBusMessage :: call()和QDBusMessage :: asyncCall()方法已被删除

Qt Gui

  • QPageRanges是一个新类,可帮助管理页面范围的集合,即在打印时

输入事件改进

过去,鼠标,平板电脑和触摸事件是完全不同的,因为只有触摸屏才是多点触摸,因此只有QTouchEvent可以携带多个触摸点。平板电脑设备还有其他功能。现在,我们已经将指针设备事件重构为具有通用的API,从而可以编写与设备无关的事件处理代码。这为在Qt Quick中使事件处理更加统一提供了基础。

  • QPointerEvent是新类,它为来自基于指针的输入设备(例如鼠标,平板电脑或触摸屏)的输入事件提供通用API。
  • QSinglePointEvent是一个新的子类,它为来自单点设备(即除触摸屏以外的所有设备)的输入事件提供了一组通用的访问器。QMouseEvent现在是QSinglePointEvent的普通子类。
  • QEventPoint存储有关单个事件点的信息。QTouchEvent带有多个实例;QSinglePointEvent携带一个实例。
  • 所述QInputDevice类表示设备从每个输入事件起源,与QPointerDevice专门用于基于指针的输入设备。QInputEvent有一个device()访问器。因此,例如,当鼠标事件是通过触摸或平板电脑事件合成的时,您可以看到它来自特定设备,而不是一只“核心”鼠标。将来,我们打算为同时使用多个输入设备提供支持:将输入与其他设备区分开来将变得更加重要。

将类从QtWidgets移到QtGui

通常对UI开发有用且对QWidget依赖性不强的几个类已移至QtGui模块中:

  • QAction和QActionGroup
  • 撤消/重做框架中的类,例如QUndoCommand和QUndoStack
  • Q快捷方式
  • QFileSystemModel

Qt网络

  • QAbstractSocket中的error()信号已替换为errorOccurred()。这避免了模棱两可的函数重载。
  • QSslSocket中已弃用的几个功能已被删除。应该改用QSslConfiguration。
  • 承载管理,尤其是类QNetworkConfiguration和QNetworkConfigurationManager被删除。因此,与承载管理相关的功能也已从QNetworkAccessManager中删除。
  • 默认的重定向策略已从手动更改为QNetworkRequest :: NoLessSafeRedirectPolicy。
  • QNetworkAccessManager默认情况下启用HTTP / 2协议。

Qt QML

  • QML导入和版本控制系统已得到全面修订:
    • 版本号在QML语言中是可选的。没有任何版本号的导入将导入模块的最新版本。仅具有主要版本号的导入将导入具有指定主要版本和最新次要版本的模块。
    • QML支持“自动”导入:可以不指定版本号,而可以编写import <module> auto。在这种情况下,导入的模块的导入版本与导入模块的版本相同。
    • qmlRegisterModuleImport()可用于以程序方式导入模块(实际上与qmldir文件中的import语句相同)。
  • QJSEngine进行了改进:
    • QJSEngine :: evaluate具有一个新的附加stackTrace参数。它可用于检查返回的QJSValue是否来自未捕获的异常,以及检索导致错误的执行的回溯。
    • 静态对象所有权功能在QJSEngine中可用,而不仅在QQmlEngine中可用。
  • QML中的颜色处理已得到改进
    • 可以在QML中使用Qt.color函数将颜色字符串转换为实际的颜色对象
    • QML语言获得了Qt.alpha函数来修改颜色的alpha值
    • 较暗,较亮和着色方法功能已添加到QML颜色对象中。
  • 可以更改派生类中QQmlListProperty的替代行为。
  • XmlHttpRequest:现在可以设置User-Agent标头。
  • Qt 6.0中已删除了一些不建议使用的行为。有关更多详细信息,请参见《移植指南》。

Qt快速

  • 除了OpenGL和OpenGL ES,Qt Quick场景图现在还可以在Vulkan,Metal和Direct3D 11上运行。
    • 具有直接OpenGL依赖关系的API被新的替代方法替代,这些替代方法可与所有受支持的图形API一起使用。这主要影响QQuickWindow,QSGTexture和QSGMaterialShader中的许多成员函数。
    • Qt Quick Scenegraph材质系统已更改为适应OpenGL以外的图形API。QSGMaterialShader具有一个全新的接口,可以通过子类来实现。
    • QQuickRenderControl具有增强的API,并由新的帮助器类QQuickRenderTarget,QQuickGraphicsDevice和QQuickGraphicsConfiguration进行了补充,它们可以更好地控制QQuickWindow和基础图形堆栈。
  • QQuickWindow有许多新信号,例如beforeRenderPassRecording()或beforeFrameBegin()。这些补充了现有信号,例如beforeRendering(),并使应用程序能够在Qt Quick场景图渲染其场景之前或之后执行自己的Vulkan,Metal,D3D或OpenGL渲染。
  • ShaderEffect和QSGMaterialShader中的顶点和片段着色器通过新的统一着色器管道处理,允许着色器写入一次,同时在运行时可与任何受支持的图形API一起使用。现在,应用程序应该使用Qt Shader Tools模块中的工具来离线或在构建时准备(编译,反射和翻译)其着色器代码。
  • Qt Quick场景图形渲染器现在也可以在与透视投影兼容的模式下运行,从而可以在一个渲染通道中渲染组合的2D-3D场景。

Qt Quick 3D

  • 移植到Qt 6.0中新的通用图形抽象。
    • 在Qt 6.0中,这方面适用于Qt Quick的所有内容(例如,配置要使用的图形API)也适用于Qt Quick 3D。3D场景渲染器使用相同的渲染基础结构插入Qt Quick,这与Qt 5.15不同,后者通过直接进入OpenGL在单独的世界中进行渲染。
  • 更统一的2D-3D场景。
    • 3D场景可以包含任意Item(QQuickItem)子树,然后由Qt Quick场景图的渲染器使用适当的转换和投影直接对其进行渲染,而不必对某些屏幕外渲染目标进行单独的渲染传递。
  • 改善渲染保真度
    • 改进的PrincipledMaterial:具有金属粗糙度工作流程的资产现在看起来更接近设计师的意图。
    • 通过适当的色调映射,增强了色彩处理能力(线性vs. sRGB)。
  • 定制材料系统已完全重新设计。在Qt 6.0中,CustomMaterial API和关联的着色器片段的编写方式发生了重大变化。另请参阅入门页面。
  • 后处理效果已迁移到遵循与CustomMaterial相同的模式的着色器处理方法,从而使编写自定义效果更加简单。
  • 现在可以通过QML API配置纹理参数(过滤,mipmap)。
  • 添加了C ++ API,用于以程序方式生成纹理的图像数据。
  • 更新了自定义几何C ++ API。
  • 该文档已进行了大量更新。还添加了体系结构文档和入门指南。

Qt快速控制

  • 添加了macOS和Windows本机桌面样式。
  • 如果未指定,则选择适合目标平台的样式。为此,Default样式被重命名为Basic。
  • 现在,通过显式导入样式来支持编译时样式选择。

向ComboBox添加了implicitContentWidthPolicy,它控制如何计算其implicitContentWidth。这可用于自动确保不忽略文本。

Qt Wayland合成器

  • 添加了对在同一合成器中通告多个客户端缓冲区集成的支持。QT_WAYLAND_CLIENT_BUFFER_INTEGRATION现在将接受用分号分隔的列表。
  • 添加了新的输入法协议,更好地支持Qt的输入法事件和Qt虚拟键盘。可以通过实例化QtTextInputMethodManager类型将其添加到合成器。
  • 添加了用于选择支持的wl_shm格式的API。
  • 添加了对wl_surface.damage_buffer请求的支持。

Qt SQL

  • boundValues()的返回类型已从QMap <QString,QVariant>更改为QVariantList

Qt测试

  • 使用QWidget参数的QTest :: QTouchEventSequence函数已移至新类QTest :: QTouchEventWidgetSequence

Qt XML

  • SAX类已被删除。请使用QXmlStreamReader读取XML文件。

Qt SVG

  • QtSvg模块中依赖于QtWidgets的那些类已移至一个单独的QtSvgWidgets库中,因此现在可以在基于Qt Quick的应用程序中使用许多QtSvg功能,而无需引入QtWidgets依赖项。

Qt OpenGL

  • 对于需要与OpenGL集成的应用程序,OpenGL模块包含便利类,以使这种类型的集成更容易,更快。依赖QtWidgets的类位于单独的QtOpenGLWidgets库中,因此基于Qt Quick的应用程序可以使用便捷类与OpenGL集成,而无需引入QtWidgets依赖项。

Qt小部件

  • 几个与小部件无关的类已从QtWidgets中移出,并移到QtGui中(请参见上文)
  • 在具有多个显示器的系统上,使用QWidget :: setScreen指定小部件应在哪个显示器上显示;QDesktopWidget类已被删除

Qt PrintSupport

  • Qt PrintSupport模块中的API已得到整合和清理,以提高一致性

新模块

Qt5兼容兼容性库提供对Qt 6中删除的旧版API的访问。QtShader工具用于准备要由新图形堆栈使用的图形和计算着色器的工具和API

平台变更

所有

  • Qt现在使用CMake构建。
  • 现在默认启用Qt High DPI缩放;默认的舍入策略为PassThrough
  • 通过新的本机接口API,现在可以使用特定于平台的API

Linux

IOS系统

WINDOWS

安卓

  • 将Java包名称从org.qtproject.qt5.android重命名为org.qtproject.qt.android。版本号将改为* .jar文件的名称(QTBUG-86969)。
  • 将Gradle守护程序用于Android应用程序构建(QTBUG-86674)。
  • 将默认javac源和目标内部版本设置为8,并允许通过configure脚本(QTBUG-86282)进行设置。
  • Qt 6的最低Android API级别为23。
  • 实现MaximizeUsingFullscreenGeometryHint以允许Android应用进入沉浸式模式(QTBUG-74202)。
  • 修复了androidtestrunner并运行QML测试。

已删除的模块

以下模块已删除,并且不打算进一步开发。不属于Qt 6.0的其他模块将被视为候选者,以支持更高版本的Qt 6.x发行版,或作为基线Qt发行版之上的其他库。

  • Qt多媒体小部件
  • Qt图形效果
  • Qt采购
  • Qt Quick Extras
  • Qt Quick WebGL
  • Qt脚本
  • Qt XML模式
  • Qt平台头

有关选择过程,请参阅Qt 6.0包含清单。

随着时间的推移,这些Qt <platform> Extras模块中的代码将在更相关的模块中找到新家,而其余的API则考虑包含在更高的6.x版本中:

  • Qt Android Extras
  • Qt Mac Extras
  • Qt X11 Extras
  • Qt Windows Extras

通过程序包管理器可用的其他模块

通过Qt在线安装程序中的软件包管理器功能,可以使用以下附加模块:

  • Qt图像格式
  • Qt 3D
  • Qt网络授权

程序包管理器将这些附加模块作为源程序包提供,需要由用户在本地构建。

工具推荐:

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面操作系统
  • QtitanDataGrid| 下载试用 : 适用于Qt的商业化DataGrid 组件,使得表格数据可以直接面向终端用户完全集成了QtDesigner,极易适应其他相似开发环境,保证100%兼容Qt GUI。

感谢您的阅读,希望这篇文章能带给你一定的帮助!如果这篇文章没能满足你的需求、点击获取更多文章教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值