问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qt6跨平台开发实战:这些坑你一定要知道

创作时间:
作者:
@小白创作中心

Qt6跨平台开发实战:这些坑你一定要知道

引用
CSDN
12
来源
1.
https://blog.csdn.net/m0_45463480/article/details/136543605
2.
https://blog.csdn.net/latterofTurtle/article/details/137785996
3.
https://github.com/mesonbuild/meson/issues/13018
4.
https://blog.csdn.net/wizardforcel/article/details/140260516
5.
https://wiki.qt.io/Qt_6.6_Known_Issues
6.
https://www.cnblogs.com/apachecn/p/18193957
7.
https://www.qt.io/platform/desktop-app-development
8.
https://juejin.cn/post/7343462662474022975
9.
https://forum.qt.io/topic/157976/cross-compile-qt6-7-on-ubunut22-04-for-raspberrypi-error
10.
https://juejin.cn/post/7454852573025091622
11.
https://scythe-studio.com/en/blog/porting-from-qt-5-to-qt-6
12.
https://wiki.qt.io/Cross-Compile_Qt_6_for_Raspberry_Pi

Qt6作为新一代跨平台开发工具,虽然功能强大,但在实际开发中仍有不少需要注意的地方。本文将从环境配置、开发实战到部署发布三大阶段,为你揭示Qt6跨平台开发中常见的坑点,并提供实用的解决方案。

01

环境配置篇:打好基础是关键

Windows平台

  • 建议使用最新版的Qt Creator:Qt Creator是Qt官方推出的集成开发环境,支持Qt所有版本的开发,具有语法高亮、代码补全、项目管理、图形界面设计、调试器等功能,可以大大提高开发效率。
  • 安装Visual Studio:虽然Qt Creator自带编译器,但为了获得更好的开发体验,建议安装Visual Studio。在安装过程中,需要选择C++相关的组件,包括MSVC编译器和Windows SDK等。
  • 配置环境变量:将Qt的bin目录添加到系统环境变量Path中,这样就可以在命令行中直接使用Qt的命令了。

macOS平台

  • Xcode是必备:在macOS平台上开发Qt程序,需要先安装Xcode。Xcode是苹果公司推出的集成开发环境,支持Objective-C、Swift、C、C++等多种编程语言,具有代码编辑、编译、调试、界面设计等功能。
  • Qt的安装:macOS平台下Qt的安装与Windows平台类似,可以直接从Qt官网下载安装包进行安装。安装完成后,需要在Qt Creator中配置Qt的版本和编译器。

Linux平台

  • GCC或Clang编译器:在Linux平台上开发Qt程序,需要先安装GCC或Clang编译器。GCC是GNU编译器集合,支持C、C++、Objective-C、Fortran、Java、Ada等多种编程语言。Clang是LLVM项目中的C语言家族前端,支持C、C++、Objective-C等多种编程语言。
  • Qt的安装:Linux平台下Qt的安装可以通过包管理器进行安装,也可以从Qt官网下载源码进行编译安装。

Android平台

Android平台是Qt6跨平台开发中需要特别注意的平台,主要有以下几点需要注意:

  • JDK版本要求:Qt6要求使用JDK11,而不是Qt5.15支持的JDK1.8。因此,在开发前需要确保已经安装了JDK11。
  • Android SDK和NDK:需要安装Android SDK和NDK。SDK用于构建和测试Android应用程序,NDK则用于编写C和C++代码。在Qt Creator中,需要配置Android SDK和NDK的路径。
  • 最低SDK版本:Qt6对Android的最低SDK版本有要求,需要确保目标设备的Android版本满足要求。
  • 类名变更:Qt6中一些与Android相关的类名发生了变化,例如QAndroidJniObject改成了QJniObject,QAndroidJniEnvironment改成了QJniEnvironment。这些变化需要在代码中进行相应的修改。
  • Android插件移除:Qt6移除了androidextras插件,将其中部分功能移到了core模块中,因此不需要额外引入。
02

开发实战篇:这些坑你一定要躲

1. 跨平台构建问题

在Qt6.6版本中,存在一些跨平台构建的问题,例如:

  • 使用-no-gui选项构建Qt源代码时可能会失败(QTBUG-117824)
  • 配置用于交叉编译的Qt时可能会在qttools中出错(QTBUG-117974)
  • 构建Qt时可能会出现'fatal error: 'QtXml/qtxmlglobal.h' file not found'的错误(QTBUG-117825)

这些问题在Qt6.6.1版本中已经得到了修复,因此建议使用Qt6.6.1或更高版本。

2. QML相关问题

  • 使用QML单例时,如果实例是注册类型的子类型而不是注册类型本身,可能会导致函数调用失败(QTBUG-117891)。这个问题在Qt6.6.1中也得到了修复。
  • 在QML中使用信号和槽时,需要注意信号和槽的参数类型必须完全匹配,否则可能会导致运行时错误。

3. 其他问题

  • 加载损坏的SVG文件可能会导致应用程序崩溃(QTBUG-117944)
  • 使用CMake版本低于3.18的项目可能会在配置时失败(QTBUG-122266)
03

部署发布篇:最后的冲刺

1. 不同平台的部署注意事项

  • Windows:需要确保所有依赖的动态链接库(DLL)都包含在发布包中。可以使用Dependency Walker工具检查可执行文件的依赖关系。
  • macOS:需要使用macdeployqt工具来处理应用程序的依赖关系,并将所有依赖的框架和插件打包到应用程序包中。
  • Linux:可以使用Linux Deploy Qt工具来处理依赖关系,并生成可以在目标系统上运行的二进制文件。
  • Android:需要使用Android SDK中的工具生成APK文件,并在设备上进行测试。需要注意的是,Qt6对Android的最低SDK版本有要求,需要确保目标设备的Android版本满足要求。

2. 性能优化建议

  • 使用Qt的性能分析工具:Qt提供了多种性能分析工具,如Qt Creator中的性能分析器和QML分析器,可以帮助开发者找出性能瓶颈。
  • 优化UI渲染:对于使用Qt Quick开发的UI,需要注意场景图的优化,避免不必要的渲染操作。
  • 使用多线程:对于计算密集型任务,可以使用Qt的多线程支持来提高性能。

3. 兼容性测试

  • 在目标平台上进行充分测试:由于不同平台的差异,即使在开发机上运行良好的代码,在目标平台上也可能出现问题。因此,需要在所有目标平台上进行充分的测试。
  • 使用虚拟机或模拟器:对于一些难以获得的硬件平台,可以使用虚拟机或模拟器进行测试。

虽然Qt6的跨平台开发带来了很多便利,但也需要面对各种平台的差异和潜在问题。通过本文的分享,希望能帮助你在Qt6的开发之旅中少走弯路,享受跨平台开发的乐趣。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号