Qt5取得了巨大成功,发布八年来,我们的用户群增长巨大。但自年以来,我们周围的世界也变化迅速。Qt在嵌入式系统中的应用猛增,同时C++也在不断发展,还诞生了新的3D图形API。这些是直接影响Qt的主要因素。
跨平台特性,用户可使用一种技术,把一套代码构建的应用程序部署到所有的桌面、移动和嵌入式平台可扩展性,覆盖了从低端的单用途设备到高端复杂的桌面应用程序和互联系统世界一流的API、工具和文档,简化了桌面和嵌入式应用程序的开发可维护性、稳定性和兼容性,轻松维护大型代码库拥有超过万用户的庞大生态系统Qt6.0是Qt6系列的第一个版本,它旨在满足新的市场需求,同时将核心价值作为我们工作的核心。在Qt6开发过程中,我们深入研究了Qt的核心部分,以确定改进方式。我们发现了几个核心重点,并投入了大量时间进行改进,包括:
利用C++17特性下一代QML全新图形架构使用QtQuick统一2D和3D图形CMake构建系统(应用程序仍支持qmake)当然,我们也花时间在其他领域做了大量的改进。我们还将举办MeetQt6.0的网络研讨会。但是让我们一起先来看看一些亮点。
C++17
在Qt6中,我们需要一个兼容C++17的编译器。这使得在开发Qt时可以使用更现代的C++语言结构,并允许我们提供与标准C++更好的集成。
C++从入门到精通(第4版)(软件开发视频大讲堂)京东月销量0好评率97%无理由退换京东配送官方店¥74.9购买核心库和API
我们为QtCore做了大量工作,因为它是实现Qt最核心部分的模块,我们做了许多改进。列举几个最重要的例子:
新的属性和绑定系统:该系统将绑定的概念(使QML在Qt5取得了巨大成功)带回到了Qt的核心,并使其可用于C++。字符串和Unicode:Qt5时我们朝着使Qt与Unicode完全对齐的方向发展,所以许多工作已经完成。但是,剩下的一些部分已在Qt6中得到了清理。更多详细信息将很快在另一篇博文中介绍。QList在Qt5中经常受到批评,因为它是对存储在其中的大于指针的对象进行堆分配,这给内存分配器带来了很大的压力。在Qt6中,我们对此进行了更改,并将QList和QVector统一为一个类。QMetaType和QVariant是Qt元对象系统的基础。没有QMetaType,信号和插槽将无法实现,动态调用需要QVariant。Qt6中的这两个类几乎完全重写。Qt中与图形无关的其他部分也完成了显著的改进。比如完成了QtConcurrent的大量重写,使得多线程应用程序的开发更加简单。我们对QtNetwork也做了大幅整理和改进。
新的图形架构
Qt5的图形架构非常依赖OpenGL作为底层3D图形API。尽管对于年的Qt5而言,这是正确的,但过去几年,随着Metal和Vulkan的推出,市场环境发生了显著变化。现在,我们有大量图形API,运用在各种平台上。对于作为跨平台框架的Qt而言,这无疑意味着我们必须适应这一点,并确保用户可以在所有平台上都以最高的图形性能运行Qt。
因此,虽然Qt5仍依赖OpenGL实现硬件加速图形,但Qt6完全改变了局面。QtQuick中的所有3D图形现在都建立在新的3D图形抽象层之上,该抽象层称为渲染硬件接口(RHI)。这使Qt可以使用目标OS/平台上原生的3D图形API。所以QtQuick现在默认会在Windows上使用Direct3D,在macOS上使用Metal。Qt中的OpenGL特定类仍然存在,但现在已从QtGui移到QtOpenGL模块中。我们还添加了一个名为QtShaderTools的新模块,以跨平台的方式处理这些API的不同着色语言。
QtQuick3D和Qt3D
QtQuick3D是一个比较新的模块,无缝扩展了QtQuick的3D功能。在QtQuick3D中,我们的重点是创建一个与QtQuick现有部分(用于2D用户界面)一样方便使用的API,同时也为创建复杂的3D场景提供全面支持。这项工作背后的主要目标是实现2D和3D内容的无缝集成。我们大改了Qt6的这个模块,这在Qt5系列中是无法做到的。最重要的是,它现在始终使用RHI抽象层来优化底层图形API和硬件。此外,它在2D和3D内容之间具有更深、更高性能的集成,允许您将2D项目放入3D场景中。它还极大地改善了对glTF2和基于物理渲染的支持,使得导入其他设计工具中创建的素材变得非常容易。Qt3D现在也基于RHI抽象层,已看到了一些性能改进和清理。
QtQuick桌面样式
QtQuick核心编程安晓辉编京东¥.5购买已下架当我们为QtQuick创建控件集时,我们的重点是使它们轻巧、高效。因此,他们不支持Qt5中的桌面样式。然而,在Qt6中,我们找到了一种方法,使它们在桌面操作系统上看起来更像原生控件。Qt6.0中,QtQuick会支持macOS和Windows上的原生样式。Qt5中的Android和Linux的原生样式Material和Fusion已经存在。我们正在为未来的Qt版本改进这些,并计划为iOS实现一种原生样式。
平台特定功能的接口
尽管Qt提供了独立开发应用程序平台所需的大部分功能,有时还需要与特定平台的功能接口。在Qt5系列中,我们提供了一组附加模块(QtX11Extras、QtWinExtras和QtMacExtras)协助实现这一目的。但是这种与Qt其他部分的完全分离导致Qt内部产生了一些架构问题以及代码不一致、冗余问题。我们努力在Qt6系列中消除这些问题,并将这些附加模块提供的功能合并到Qt直接提供的平台特定的API中。这将使Qt6中与操作系统/平台特定API的接口更加简单。
Qt5.9C++开发指南(异步图书出品)京东月销量好评率98%无理由退换京东配送¥89购买构建系统和打包
我们还大幅修改了构建和分发Qt的方式。值得一提的是,Qt6本身现在是使用CMake构建的。这也为使用CMake构建项目的所有用户带来了重大改进。我们将在Qt6生命周期内继续支持qmake,因此,如果您正使用它,则无需更改构建系统,但是我们建议所有新项目都使用CMake。Qt6还附带了一个更小的默认程序包,许多附加组件现在通过程序包管理器作为单独的包分发。这使我们能更灵活地根据市场需求调整附加组件的发布时间表,例如,允许核心Qt包更频繁地发布新特性,或者让它们同时适用于多个Qt版本。此外,我们可以使用程序包管理器作为第三方内容的交付渠道。最后,用户可以灵活地选择只下载真正需要的内容。目前,我们正使用现有Qt安装程序作为程序包管理器的后端,但正在研究未来版本的替代方案。
Qt5开发及实例(第4版)(含典型案例视频分析)京东好评率97%无理由退换京东配送官方店旗舰店¥.4购买兼容性
当修改Qt6时,我们尝试调整APIs以适应我们认为的未来需求,同时尽量减少对现有用户的妨碍。尽管您的代码需要做些调整以充分利用Qt6,但我们已经尝试尽可能轻松地移植到新版本。我们做的第一件事就是清理代码库。在Qt5生命周期中,我们废弃了相当多的APIs,甚至整个模块。我们做的第一件事是删除这些内容,以打造更精简的Qt,并允许我们抛下一些今天看来不再有意义的内容。其实我们已小心翼翼地标记了那些在Qt5.15中弃用的APIs。启用废弃警告并清除这些APIs将使您的代码库兼容Qt6迈进一大步。Qt5中删除的某些最常用的APIs已被移动到Qt5CoreCompat模块中。它包含几个从Qt6中删除的广泛使用的类,如QRegExp、QTextCodec、旧的用于XML的SAX解析器以及一些其他项目。本模块的目的是作为移植助手,除了针对Qt5的回归和与安全相关的问题之外,不接受bug修复。我们建议您将它用于移植,但随后逐步移除对该模块的依赖。如果您想开始移植到Qt6,可以在我们的文档中找到更详细的移植指南。
支持的平台
Qt的核心价值之一是跨平台,并将在Qt6延续。Qt6.0支持:
Windows10macOS10.14及更新版本Linux(Ubuntu20.04,CentOS8.1和OpenSuSE15.1)iOS13或更新版本Android(API级别23或更新版本)在嵌入式方面,我们支持多种运行Linux的嵌入式设备,Qt6还不支持Qt5中支持的任何嵌入式实时操作系统。QNX和INTEGRITY最近都增加了对C++17的支持,我们计划在发布Qt6.2时增加相应支持。
PythonGUI设计PyQt5从入门到实践(全彩版)赠纸质专属魔卡、PPT课件京东月销量好评率99%无理由退换京东配送官方店¥87.9购买展望
Qt6.0尚不支持Qt5.15中的许多附加模块。这么做是为了腾出时间以确保我们可以完成Qt框架中基本模块所需的所有更改。我们现在正致力于将大部分附加组件添加到Qt6,已经做了大量的工作,我们希望在Qt6.2时能够再次支持大多数附加组件。许多附加组件已经可以使用Qt6编译,但是还没有正式发布,因为一些清理工作和重构仍有待完成。