Qt 6.0 中的 Qt Quick 模块是构建现代、动态用户界面的核心框架,基于声明式编程(QML)和 JavaScript,专注于高性能、流畅的动画和跨平台 UI 开发。、
一、主要功能改进
1. Qt Quick 核心架构
-
QML 引擎升级:Qt 6.0 使用全新的 QML 引擎,基于 Qt 5 的改进,提供更快的解析和执行速度。
-
强类型系统:引入更严格的类型检查(静态类型支持),减少运行时错误,提升性能。
-
JavaScript 引擎:仍基于 V8(默认)或其他引擎,但优化了与 QML 的集成效率。
2. 图形渲染改进
-
RHI(Render Hardware Interface):Qt 6 统一了底层图形 API(如 Vulkan、Metal、Direct3D、OpenGL),Qt Quick 通过 RHI 实现更高效的渲染,适配不同平台的图形后端。
-
场景图(Scene Graph)优化:增强渲染性能,支持更复杂的视觉效果和粒子系统。
3. 关键子模块
-
Qt Quick Controls 2:提供现成的 UI 控件(如按钮、滑块、列表视图),支持 Material、iOS 等样式。
- 改进的
TableView
:高性能表格控件,支持大数据集。
- 改进的
-
Qt Quick 3D:集成 3D 渲染能力,允许在 QML 中直接创建 3D 场景(需单独引入模块)。
-
Qt Quick Particles:粒子系统,用于炫酷的动画效果(如烟雾、火花)。
4. 新增特性
-
属性绑定优化:更高效的属性绑定机制,减少不必要的重新计算。
-
ShaderEffect 增强:支持更复杂的自定义着色器效果。
-
跨平台适配:更好地支持高DPI屏幕、黑暗模式等现代UI需求。
5. 工具链支持
-
QML 工具更新:
-
qmlformat
:自动格式化 QML 代码。 -
qmllint
:静态分析工具,检测 QML 代码问题。
-
-
Qt Creator 集成:改进的 QML 代码补全、调试和性能分析工具。
6. 废弃和变更
-
移除部分 Qt 5 中过时的 API(如一些旧的 Qt Quick 1.0 组件)。
-
部分模块需显式导入(如
QtQuick.Window
替代旧的QtQuick 2.0
全局对象)。
7. 适用场景
-
移动/嵌入式应用:流畅动画、低资源占用。
-
桌面应用:现代化风格(支持 Material Design、Fluent 等)。
-
工业 HMI:快速原型开发和复杂交互界面。
8.示例代码(Qt 6.0 QML)
cpp
import QtQuick
import QtQuick.Controls
ApplicationWindow {
width: 400
height: 300
visible: true
Button {
text: "Click Me"
anchors.centerIn: parent
onClicked: label.text = "Hello, Qt 6!"
}
Label {
id: label
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
}
}
9.小结
Qt 6.0 的 Qt Quick 在性能、类型安全和跨平台渲染上大幅提升,同时保持了易用性。开发者可以更高效地构建响应式、美观的应用程序,尤其适合需要硬件加速和现代 UI 的场景。如需使用 3D 或高级功能,需额外引入 QtQuick3D
等模块。
二、核心功能
1. Qt Quick 核心功能
1.1 QML 语言增强
-
强类型支持:Qt 6.0 引入了更严格的类型系统,减少运行时错误,提高性能。
-
属性绑定优化:更高效的属性绑定机制,减少不必要的重新计算。
-
JavaScript 集成 :支持 ECMAScript 6+ 特性(如
let
/const
、箭头函数等)。 -
模块化导入:
cppimport QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Window 2.15
1.2 基础元素
-
基本可视元素:
Rectangle
、Image
、Text
、Item
(基础容器)
-
布局管理:
-
Row
、Column
、Grid
、Flow
(流式布局) -
anchors
(锚定布局) -
Layout
相关属性(结合QtQuick.Layouts
)
-
1.3 动画与过渡
-
动画类型:
-
PropertyAnimation
(属性动画) -
NumberAnimation
(数值动画) -
ColorAnimation
(颜色动画) -
SequentialAnimation
(顺序动画) -
ParallelAnimation
(并行动画)
-
-
缓动曲线:
easing.type: Easing.InOutQuad
(支持多种缓动效果)
-
状态与过渡:
cppstates: [ State { name: "active"; PropertyChanges { target: rect; color: "red" } } ] transitions: Transition { PropertyAnimation { properties: "color"; duration: 200 } }
2. Qt Quick Controls 2(UI 控件库)
提供现成的 UI 组件,支持多种样式(Material、iOS、Universal 等):
-
基础控件:
Button
、CheckBox
、RadioButton
、Slider
、TextField
-
高级控件:
ComboBox
、SpinBox
、Switch
、RangeSlider
-
容器控件:
TabBar
、SwipeView
、ScrollView
、StackView
-
列表与表格:
ListView
、GridView
、TableView
(高性能大数据渲染)
-
对话框:
Dialog
、FileDialog
、ColorDialog
3. Qt Quick 图形与渲染
3.1 场景图(Scene Graph)
-
基于 GPU 加速的渲染架构。
-
支持 粒子系统(ParticleSystem) 、阴影(DropShadow) 、混合模式(BlendMode)。
3.2 着色器效果(ShaderEffect)
-
支持 GLSL 自定义着色器:
cppShaderEffect { fragmentShader: " uniform sampler2D source; varying highp vec2 qt_TexCoord0; void main() { gl_FragColor = texture2D(source, qt_TexCoord0) * vec4(1, 0, 0, 1); }" }
3.3 3D 集成(Qt Quick 3D)
-
需单独引入
QtQuick3D
模块:-
View3D
(3D 场景容器) -
Model
(加载 3D 模型) -
DirectionalLight
(光源) -
PrincipledMaterial
(PBR 材质)
-
4. 数据处理与模型视图
4.1 数据模型
-
ListModel
(动态列表数据) -
XmlListModel
(XML 数据绑定) -
JsonListModel
(JSON 数据绑定)
4.2 视图组件
-
ListView
(垂直/水平列表) -
GridView
(网格布局) -
TableView
(高性能表格,支持大数据) -
PathView
(沿路径滚动的视图)
4.3 C++ 与 QML 交互
-
通过
Q_PROPERTY
暴露 C++ 数据:cppclass MyData : public QObject { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) };
-
在 QML 中使用:
cppqml Text { text: myData.text }
5. 窗口管理与多屏支持
-
Window
(顶级窗口) -
ApplicationWindow
(带菜单栏、状态栏的主窗口) -
Screen
(多显示器信息) -
Window.onScreenChanged
(屏幕切换事件)
6. 网络与多媒体
-
MediaPlayer
(音频/视频播放) -
SoundEffect
(低延迟音效) -
WebEngineView
(基于 Chromium 的 Web 视图,需QtWebEngine
)
7. 工具与调试
-
QML 工具链:
-
qmllint
(静态检查 QML 代码) -
qmlformat
(自动格式化 QML) -
qmlprofiler
(性能分析)
-
-
Qt Creator 支持:
-
QML 代码补全
-
实时预览(QML Live Preview)
-
断点调试(QML Debugger)
-
8. 平台适配
-
高 DPI 支持:
- 自动缩放(
QT_DEVICE_PIXEL_RATIO
)
- 自动缩放(
-
黑暗模式:
-
检测系统主题:
cppqml Palette { colorRole: Palette.Window; color: systemPalette.window }
-
-
移动端优化:
-
触摸事件(
TapHandler
、PinchHandler
) -
虚拟键盘(
InputPanel
)
-
9. 示例代码
9.1 基本窗口 + 按钮
cpp
import QtQuick
import QtQuick.Controls
ApplicationWindow {
width: 400
height: 300
visible: true
Button {
text: "Click Me"
anchors.centerIn: parent
onClicked: console.log("Button clicked!")
}
}
9.2 动画示例
cpp
Rectangle {
width: 100; height: 100
color: "blue"
PropertyAnimation on x {
from: 0; to: 200
duration: 1000
loops: Animation.Infinite
}
}
9.3 ListView 示例
cpp
ListView {
model: ListModel {
ListElement { name: "Apple" }
ListElement { name: "Banana" }
}
delegate: Text { text: name }
}
10. 小结
功能 | 说明 |
---|---|
QML 语言 | 声明式 UI 编程,支持 JavaScript |
Qt Quick Controls 2 | 现代化 UI 组件库 |
图形渲染 | GPU 加速(Scene Graph + ShaderEffect) |
3D 支持 | 需 QtQuick3D 模块 |
数据绑定 | ListModel 、TableView 、C++ 集成 |
工具链 | qmllint 、qmlprofiler 、Qt Creator 支持 |
跨平台 | 支持 Windows/macOS/Linux/Android/iOS |
Qt 6.0 的 Qt Quick 提供了更强大的 UI 开发能力,适合构建 桌面、移动端、嵌入式 HMI 等现代化应用。如需 3D 或高级功能,可结合 QtQuick3D
、QtWebEngine
等模块使用。
三、Qt Quick架构
1. Qt Quick 整体架构
Qt Quick 的架构可以分为 5 个主要层级:
层级 | 组件 | 功能 |
---|---|---|
1. QML 语言层 | QML 引擎、JavaScript | 声明式 UI 编程,数据绑定 |
2. Qt Quick 核心层 | QtQuick 模块 |
基础元素(Rectangle, Text, Image)、动画、状态管理 |
3. 渲染层 | 场景图(Scene Graph)、RHI | GPU 加速渲染,跨平台图形 API 抽象 |
4. UI 控件层 | QtQuick.Controls |
预制 UI 组件(Button, Slider, ListView) |
5. 平台适配层 | QPA(Qt Platform Abstraction) | 处理窗口管理、输入事件、高 DPI 支持 |
2. QML 引擎与语言层
2.1 QML 引擎
-
基于 Qt QML 模块,负责解析和执行 QML 代码。
-
支持 即时编译(JIT) 和 AOT(Ahead-of-Time)编译(Qt 6.2+ 支持 QML 预编译)。
-
优化了 属性绑定 机制,减少不必要的重新计算。
2.2 JavaScript 集成
-
默认使用 V8 引擎(或其它 JS 引擎),支持 ES6+ 语法。
-
可以直接在 QML 中嵌入 JavaScript 逻辑:
cppText { text: { let a = 10; return `Value: ${a}`; } }
2.3 类型系统
-
静态类型检查(Qt 6.0 强化):
cppproperty int count: 0 // 明确类型 property string name: "Qt"
-
信号与槽(Signal & Slot):
cppsignal buttonClicked(string msg) onButtonClicked: console.log(msg)
3. Qt Quick 核心层
3.1 基础元素
元素 | 功能 |
---|---|
Item |
基础容器,无可视化表现 |
Rectangle |
带颜色和边框的矩形 |
Text |
文本显示 |
Image |
图片加载 |
MouseArea |
处理鼠标/触摸事件 |
3.2 布局系统
-
锚定布局(Anchors):
cppRectangle { anchors.centerIn: parent }
-
定位器(Positioners):
cppRow { spacing: 5 Button { text: "A" } Button { text: "B" } }
-
动态布局(Layouts):
cppimport QtQuick.Layouts GridLayout { columns: 2 Text { text: "Name:" } TextField { } }
3.3 动画系统
-
属性动画:
cppPropertyAnimation { target: rect property: "opacity" from: 0; to: 1 duration: 1000 }
-
状态与过渡:
cppstates: [ State { name: "active"; PropertyChanges { target: rect; color: "red" } } ] transitions: Transition { PropertyAnimation { properties: "color"; duration: 200 } }
4. 渲染层(Scene Graph + RHI)
4.1 场景图(Scene Graph)
-
GPU 加速的渲染管线,避免直接调用 OpenGL/Vulkan/Metal。
-
优化策略:
-
批处理(Batching):合并相同材质的绘制调用。
-
裁剪(Culling):只渲染可见部分。
-
异步渲染(Threaded Render Loop)。
-
4.2 RHI(Render Hardware Interface)
-
Qt 6 引入的 跨平台图形抽象层,支持:
-
Vulkan(默认优先)
-
Metal(macOS/iOS)
-
Direct3D 11/12(Windows)
-
OpenGL(兼容旧设备)
-
-
开发者无需关心底层 API,Qt Quick 自动选择最优后端。
4.3 自定义渲染
-
ShaderEffect
(GLSL 着色器):cppShaderEffect { fragmentShader: " uniform sampler2D source; void main() { gl_FragColor = texture2D(source, qt_TexCoord0); }" }
-
Canvas
(2D 绘图,类似 HTML5 Canvas):cppCanvas { onPaint: { var ctx = getContext("2d"); ctx.fillStyle = "blue"; ctx.fillRect(10, 10, 50, 50); } }
5. UI 控件层(Qt Quick Controls 2)
控件类型 | 示例 |
---|---|
基础控件 | Button 、CheckBox 、Slider |
容器控件 | TabBar 、SwipeView 、StackView |
列表控件 | ListView 、TableView 、GridView |
对话框 | Dialog 、FileDialog |
样式系统:
-
支持 Material Design 、iOS 、Universal 等风格:
cppimport QtQuick.Controls.Material Button { Material.background: Material.Purple }
6. 平台适配层
6.1 窗口管理
-
Window
:顶级窗口。 -
ApplicationWindow
:带菜单栏的主窗口。 -
多屏支持:
cppWindow { onScreenChanged: console.log("Moved to screen:", screen.name) }
6.2 输入处理
-
触摸事件:
cppTapHandler { onTapped: console.log("Tapped!") }
-
键盘事件:
cppKeys.onPressed: { if (event.key === Qt.Key_Enter) submit(); }
6.3 高 DPI 支持
-
自动缩放(
QT_DEVICE_PIXEL_RATIO
)。 -
矢量图形(SVG)适配。
7. 数据与 C++ 交互
7.1 数据模型
-
ListModel
(动态数据):cppListModel { ListElement { name: "Apple" } ListElement { name: "Banana" } }
-
QAbstractItemModel
(C++ 数据绑定):cppQStandardItemModel model; model.setItem(0, 0, new QStandardItem("Qt"));
7.2 C++ 与 QML 通信
-
暴露 C++ 对象:
cppclass Backend : public QObject { Q_OBJECT Q_PROPERTY(QString data READ data NOTIFY dataChanged) };
-
在 QML 中使用:
cppText { text: backend.data }
8. 小结
架构层级 | 关键技术 |
---|---|
QML 语言层 | QML 引擎、JavaScript、属性绑定 |
核心层 | Item 、Rectangle 、动画、布局 |
渲染层 | Scene Graph、RHI、ShaderEffect |
UI 控件层 | QtQuick.Controls 2 、样式系统 |
平台适配层 | 窗口管理、输入处理、高 DPI |