Qt5升级到Qt6分步迁移教程小结
作者:闫有尽意无琼
Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用(如果不是现在,可能会在将来),因此最好将应用程序迁移到最新版本的框架。
仍然有许多应用程序仍在使用Qt 5,因此直接迁移到最新版本的框架并不容易。在本文中主要指出从Qt 5顺利迁移到Qt 6的最关键步骤。
那么,为什么是Qt 6呢?
- 改进了性能。Qt 6引入了一个新的渲染管线,可以提高性能并减少内存使用量,从而产生更快、响应更快的应用程序。
- 改进的 QML。QML 已得到增强,性能更好,改进了对将C++类导出到 QML 的支持,以及用于调试 QML 代码的更强大的工具。新的Qt快速编译器允许您预编译QML文件,以加快启动时间。
- 改进的模块。一些模块已被重写和改进,例如Qt Quick 3D,Qt Multimedia和Qt WebEngine。使用这些模块的最新版本将确保您的应用程序符合当前标准。
- 附加模块。许多模块将作为附加组件提供。它将使Qt二进制文件更小,并允许您仅在项目中需要时才下载模块。
- 统一后端。Qt 6提供了一个API来访问多个环境中特定于平台的功能。这包括图形、多媒体、输入和窗口系统。
- 长期支持。Qt 5已经到了它的生命周期,虽然某些旧版本仍然有安全和错误修复,但任何新的特性或功能都只能在Qt 6中使用。如果您不希望您的应用程序过时得太快,您应该进行迁移。
这些是确保使用最新版本的Qt 6使您的应用程序与最新功能保持同步的主要内容。应用程序的性能将比以前更好,并且将来维护应用程序将更容易。
迁移到Qt 6的路径
第 1 步、QT 移植到 QT 5.15
将应用程序移植到Qt 5的最新版本,然后切换到Qt 6要容易得多。这是因为Qt在6.5版本中只发布了简化迁移到Qt 5.15的机制。从Qt 5的先前版本迁移到最新版本的Qt 5应该很简单。
第 2 步、检查模块更改
在Qt 6中,Qt 5中提供的某些模块不再可用。这些模块将被删除、重命名或合并到不同的模块中。在最新版本中,几个已删除的模块已经刷新并添加到框架中。
通过检查模块更改,可以确保应用程序在迁移后按预期工作。当模块不再存在时,关于如何表现的可能解决方案可能会有所不同。下面是几个已弃用模块的示例,以及如何更新使用它们的代码。
- Qt 快速控制 1 → 使用新的 Qt 快速控制 2
- Qt Multimedia Widgets → 使用 Qt Multimedia 的 QML API
- Qt 图形效果 → 使用 Qt5Compat 模块(Qt Quick MultiEffect 从 Qt 6.5 开始)
因此,取决于需要替换的模块。删除模块和其他更改的完整列表可以在Qt文档中找到。
“是否需要检查文档中每个模块的更改?”
没必要。它可以帮助您找到已弃用API的正确替代品,但Qt creator工具可以提示不再受支持的代码的所有部分。请看步骤4.
第 3 步、QT移植:检查您的环境
Qt 6需要C++17或更高版本的编译器(例如,对于Windows – MinGW 8.1.0或msvc 2019),因此如果您使用的是旧版本,则是时候升级了。Qt公司开发的工具也支持Qt 6,因为特定版本。对于Qt Creator,它是4.14,对于Qt Design Studio,它是2.0。
如果安装了正确的编译器和工具,则为 Qt 6 准备的应用程序应在移植后正确构建和运行。
第 4 步、执行移植到 QT 6
摆脱已弃用的功能。
在Qt 5.15中,Qt 6中不包含的所有内容都被标记为已弃用。默认情况下,此代码的使用将作为编译器警告弹出。但是也可以选择将其视为错误。
要确保这一点,需要定义它应设置为指定宏时,已弃用的功能(在给定版本的Qt或任何更早版本中)将被禁用。
QT_DISABLE_DEPRECATED_BEFORE
0x050F00
如果在生成过程中看到任何错误,则应重构该部分。
不带宏的输出。应用已正确构建。
使用宏输出。无法构建应用。
运行冲突并摆脱这些警告。
Clazy 是一个静态分析工具,可作为 QtCreator 中的插件使用。Clazy 可以分析代码并向您展示需要改进的地方。可以明确地告诉 Clazy 在执行过程中要检查什么。需要检查一些特殊选项,这些选项可以指向Qt 6中不支持的代码部分。Clazy 也能够自动修复这些警告。
在移植过程中有用的选项:
- qt6-deprecated-api-fixes
- qt6-header-fixes
- qt6-qhash-signature
- qt6-fwd-fixes
- missing-qobject-macro
可以在首选项→分析器→Clang工具→诊断配置中更改延迟配置。
在移植过程中有用的选项:
输出示例。
必要时使用 Qt5Compat 模块。
在第2步中,提到了一个名为Qt5Compat模块?
引入该模块是为了更好的进行迁移和过渡。它提供了Qt 6中消失的一些类,例如QRegExp和QStringRef,但由于这一点,它仍然可以在Qt 6应用程序中使用。比如某些模块在Qt 6中消失了,但将在下一个版本中作为MultiEffect重新引入。因此,在此期间,可以暂时使用Qt5Compat模块来确保兼容性。但是当MultiEffect模块可用时,应该重写代码以切断过时的API。
如何将模块导入到项目中:
头文件包含也需要更改:
最后,请做好相关测试。
到此这篇关于Qt5升级到Qt6分步迁移教程小结的文章就介绍到这了,更多相关Qt5升级到Qt6内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!