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.使用示例
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中采用清晰的分层设计:
+---------------------------+
| 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)
控件使用委托模式实现可视化表示:
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 状态管理
每个控件都有明确定义的状态:
// 典型按钮状态
enum ButtonState {
Normal,
Hovered,
Pressed,
Disabled
}
3.3 输入处理管道
Raw Input → Qt Quick事件系统 → 控件逻辑 → 可视化反馈
4. 样式架构
4.1 样式组成
控件实现: 定义控件行为和基本结构
样式代理: 将可视化委托给样式系统
样式资源: 图像、字体等资源
4.2 样式继承机制
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为例:
Button
├── contentItem (Text)
├── background (Rectangle)
├── Behavior (动画)
└── MouseArea (输入处理)
这种架构设计使Qt Quick Controls在Qt 6中既保持了灵活性,又提供了良好的性能表现,适合现代UI开发需求。