在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application

在 Qt Creator 中创建新项目时,Qt Quick Application (Compat)Qt Quick Application 的主要区别在于对 Qt 6 的兼容性和架构设计。以下是详细对比:


1. Qt Quick Application (Compat)

设计目的

为从 Qt 5 迁移到 Qt 6 的项目提供向后兼容性,保留 Qt 5 的部分特性。

核心特点

  • 兼容 Qt 5 的 QML 语法
    使用 QtQuick.Compat 模块(如 QtQuick.Controls 1.xQtQuick.Dialogs 1.x),允许旧版 QML 代码在 Qt 6 中运行。
  • 包含 Qt Widgets 模块
    默认链接 Qt Widgets 库,支持混合使用 QML 和传统 Widgets(例如在 QML 中嵌入 QWidget)。
  • 资源管理方式
    沿用 Qt 5 的 qrc 资源系统,适合需要兼容旧资源结构的项目。

适用场景

  • 从 Qt 5 升级到 Qt 6 的迁移项目
  • 需要同时使用 QML 和 Widgets 的混合界面
  • 依赖旧版 QtQuick.Controls 1.x 的代码

2. Qt Quick Application

设计目的

纯粹基于 Qt 6 的现代 QML 应用架构,充分利用 Qt 6 的新特性。

核心特点

  • 仅支持 Qt 6 原生 QML
    使用 QtQuick.Controls 2.x 等现代模块,不兼容 Qt 5 的旧语法。
  • 不链接 Qt Widgets
    仅依赖 Qt QuickQt QML 模块,适合纯 QML/Quick 项目。
  • 改进的资源系统
    支持 Qt 6 的 CMake 资源管理(如 qt_add_qml_module),更高效。
  • 更好的性能
    利用 Qt 6 的改进渲染引擎(如 RHI)。

适用场景

  • 全新开发的 Qt 6 项目
  • 纯 QML 界面(无 Widgets 需求)
  • 希望使用最新 QtQuick.Controls 2.x 样式

关键区别总结

特性 Qt Quick Application (Compat) Qt Quick Application
Qt 版本兼容性 兼容 Qt 5 和 6 仅 Qt 6
QML 模块 使用 QtQuick.Compat 使用原生 QtQuick 2.x
Qt Widgets 支持 默认启用 不包含
资源系统 传统 qrc 文件 支持 CMake 资源管理
适用场景 迁移项目/混合界面 全新纯 QML 项目

如何选择?

  1. 选 (Compat) 如果:

    • 需要复用 Qt 5 的 QML 代码
    • 项目中有 QWidget 和 QML 混合内容
    • 依赖 QtQuick.Controls 1.x 等旧模块
  2. 选标准版本 如果:

    • 开发全新 Qt 6 应用
    • 使用现代 QtQuick.Controls 2.x(如 Material/MacOS 风格)
    • 不需要 Widgets 支持

注意事项

  • 从 Compat 迁移到纯 Qt 6
    如果未来想移除 Compat 依赖,需要替换所有 QtQuick.Compat 导入为 Qt 6 原生模块(例如 QtQuick.Controls 1.x → 2.x)。
  • 性能影响
    Compat 模式可能会有轻微性能开销,因为包含兼容层。

建议新项目优先选择 Qt Quick Application(非 Compat),除非有明确的兼容性需求。

相关推荐
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner3 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz8 天前
QML Hello World 入门示例
qt
xcyxiner11 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner12 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner13 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript