Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。
一、主要功能和特点
1. 架构重构
-
完全重写了底层架构,与Qt Quick更紧密集成
-
移除了对Qt Widgets的依赖,成为纯Qt Quick解决方案
-
引入了新的样式系统,更加灵活和可定制
2. 控件集合
Qt Quick Controls 2在Qt 6.0中提供了以下主要控件类型:
基本控件:
-
Button (按钮)
-
CheckBox (复选框)
-
RadioButton (单选按钮)
-
Switch (开关)
-
Slider (滑块)
-
ProgressBar (进度条)
-
BusyIndicator (忙碌指示器)
容器控件:
-
GroupBox (分组框)
-
Frame (框架)
-
Page (页面)
-
Pane (面板)
-
ScrollView (滚动视图)
-
StackView (堆栈视图)
-
SwipeView (滑动视图)
-
TabBar/TabButton (标签栏/标签按钮)
文本相关控件:
-
Label (标签)
-
TextField (文本输入框)
-
TextArea (多行文本区域)
-
ComboBox (组合框)
菜单和对话框:
-
Menu (菜单)
-
ToolBar (工具栏)
-
Dialog (对话框)
-
ToolTip (工具提示)
3. 样式系统
-
引入了新的"QQuickStyle"系统
-
支持多种内置样式:Default (默认), Material (Material设计), Universal (Windows风格), iOS (苹果风格)
-
更容易创建自定义样式
-
样式可以通过配置文件或运行时API进行更改
4. 平台集成
-
更好的原生平台外观和感觉
-
自动适应运行平台的设计语言
-
支持高DPI显示
-
改进的输入处理(触摸、笔、键盘)
5. 性能改进
-
更轻量级的实现
-
改进的渲染性能
-
减少内存占用
-
更快的启动时间
6.与Qt 5的差异
-
移除了Qt Quick Controls 1(基于QWidget的样式系统)
-
不再需要单独的
QtQuick.Controls
和QtQuick.Controls.2
模块 -
样式API更加简洁一致
-
默认控件实现更加高效
7.使用示例
cpp
import QtQuick
import QtQuick.Controls
ApplicationWindow {
visible: true
width: 400
height: 300
title: "Qt Quick Controls 2 Demo"
Column {
anchors.centerIn: parent
spacing: 10
Label {
text: "Welcome to Qt 6!"
font.pixelSize: 24
}
Button {
text: "Click me"
onClicked: label.text = "Button clicked!"
}
Label {
id: label
text: ""
}
Slider {
width: 200
from: 0
to: 100
value: 50
}
}
}
Qt Quick Controls 2在Qt 6中为现代触摸和桌面应用程序提供了强大而灵活的UI解决方案,特别适合需要快速开发和跨平台部署的项目。
二、架构分析
1. 分层架构
Qt Quick Controls 2在Qt 6中采用清晰的分层设计:
cpp
+---------------------------+
| Application UI | (用户自定义QML代码)
+---------------------------+
| Qt Quick Controls | (预构建控件如Button, Slider等)
+---------------------------+
| Qt Quick Templates | (控件的非可视化基础)
+---------------------------+
| Qt Quick | (基本QML类型和渲染引擎)
+---------------------------+
| Qt Core | (基础框架)
+---------------------------+
2. 核心组件
2.1 控件系统 (Controls)
-
Control: 所有控件的基类型,提供基本功能如padding、background等
-
Container控件: 管理子项布局的控件(如Pane, Frame)
-
内容控件: 显示特定内容的控件(如Button, CheckBox)
2.2 样式系统 (Styling)
-
QQuickStyle: 负责加载和应用样式
-
内建样式: Default, Material, Universal, iOS等
-
样式属性 : 通过附加属性(如
Style.hovered
)访问状态
2.3 模板系统 (Templates)
-
AbstractButton: 按钮类控件的抽象基类
-
TextControl: 文本相关控件的基类
-
Container: 容器控件的基类
3. 关键架构特性
3.1 委托系统 (Delegates)
控件使用委托模式实现可视化表示:
cpp
Button {
id: control
text: "Custom Button"
contentItem: Text {
text: control.text
color: control.down ? "red" : "black"
}
background: Rectangle {
color: control.hovered ? "#ddd" : "#eee"
border.color: "#999"
}
}
3.2 状态管理
每个控件都有明确定义的状态:
cpp
// 典型按钮状态
enum ButtonState {
Normal,
Hovered,
Pressed,
Disabled
}
3.3 输入处理管道
cpp
Raw Input → Qt Quick事件系统 → 控件逻辑 → 可视化反馈
4. 样式架构
4.1 样式组成
-
控件实现: 定义控件行为和基本结构
-
样式代理: 将可视化委托给样式系统
-
样式资源: 图像、字体等资源
4.2 样式继承机制
cpp
QQuickStyle → 平台默认样式 → 用户自定义样式 → 控件内联样式
5. 与Qt Quick的关系
Qt Quick Controls构建在Qt Quick基础之上:
-
使用Qt Quick的渲染和场景图
-
继承自Item和Rectangle等基本类型
-
利用Qt Quick的动画系统
6. 与Qt Widgets的区别
特性 | Qt Quick Controls | Qt Widgets |
---|---|---|
基础技术 | 基于Qt Quick/场景图 | 基于QPainter |
渲染方式 | GPU加速 | 通常CPU渲染 |
样式系统 | QML-based样式 | QStyle子系统 |
主要用途 | 现代触摸/嵌入式UI | 传统桌面应用 |
动态效果支持 | 原生支持 | 有限支持 |
7. 性能优化架构
-
对象组合优于继承: 减少QML对象层次深度
-
延迟加载: 资源按需加载
-
绑定优化: 自动断开不必要的属性绑定
-
场景图优化: 批量渲染操作
8. 典型控件内部结构
以Button为例:
cpp
Button
├── contentItem (Text)
├── background (Rectangle)
├── Behavior (动画)
└── MouseArea (输入处理)
这种架构设计使Qt Quick Controls在Qt 6中既保持了灵活性,又提供了良好的性能表现,适合现代UI开发需求。