当前位置: 首页 > article >正文

Qt Quick Controls模块功能及架构

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的差异

  1. 移除了Qt Quick Controls 1(基于QWidget的样式系统)

  2. 不再需要单独的QtQuick.ControlsQtQuick.Controls.2模块

  3. 样式API更加简洁一致

  4. 默认控件实现更加高效

7.使用示例

import QtQuick
import QtQuick.ControlsApplicationWindow {visible: truewidth: 400height: 300title: "Qt Quick Controls 2 Demo"Column {anchors.centerIn: parentspacing: 10Label {text: "Welcome to Qt 6!"font.pixelSize: 24}Button {text: "Click me"onClicked: label.text = "Button clicked!"}Label {id: labeltext: ""}Slider {width: 200from: 0to: 100value: 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: controltext: "Custom Button"contentItem: Text {text: control.textcolor: 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 样式组成

  1. 控件实现: 定义控件行为和基本结构

  2. 样式代理: 将可视化委托给样式系统

  3. 样式资源: 图像、字体等资源

4.2 样式继承机制

QQuickStyle → 平台默认样式 → 用户自定义样式 → 控件内联样式

5. 与Qt Quick的关系

Qt Quick Controls构建在Qt Quick基础之上:

  • 使用Qt Quick的渲染和场景图

  • 继承自Item和Rectangle等基本类型

  • 利用Qt Quick的动画系统

6. 与Qt Widgets的区别

特性Qt Quick ControlsQt Widgets
基础技术基于Qt Quick/场景图基于QPainter
渲染方式GPU加速通常CPU渲染
样式系统QML-based样式QStyle子系统
主要用途现代触摸/嵌入式UI传统桌面应用
动态效果支持原生支持有限支持

7. 性能优化架构

  1. 对象组合优于继承: 减少QML对象层次深度

  2. 延迟加载: 资源按需加载

  3. 绑定优化: 自动断开不必要的属性绑定

  4. 场景图优化: 批量渲染操作

8. 典型控件内部结构

以Button为例:

Button
├── contentItem (Text)
├── background (Rectangle)
├── Behavior (动画)
└── MouseArea (输入处理)

这种架构设计使Qt Quick Controls在Qt 6中既保持了灵活性,又提供了良好的性能表现,适合现代UI开发需求。

相关文章:

Qt Quick Controls模块功能及架构

Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...

手动给中文分词和 直接用神经网络RNN做有什么区别

手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动&#xff09…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

计算机系统结构复习-名词解释2

1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...

HTML中各种标签的作用

一、HTML文件主要标签结构及说明 1. <&#xff01;DOCTYPE html> 作用&#xff1a;声明文档类型&#xff0c;告知浏览器这是 HTML5 文档。 必须&#xff1a;是。 2. <html lang“zh”>. </html> 作用&#xff1a;包裹整个网页内容&#xff0c;lang"z…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称&#xff1a;Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号&#xff1a;CVE-2023-25194 CVSS评分&#xff1a;8.8 影响版本&#xff1a;Apache Kafka 2.3.0 - 3.3.2 修复版本&#xff1a;≥ 3.4.0 漏洞类型&#xff1a;反序列化导致的远程代…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征&#xff08;均值、比率、总量&#xff09;控制抽样误差与非抽样误差 解决的核心问题 在成本约束下&#xff0c;用少量样本准确推断总体特征量化估计结果的可靠性&#xff08;置…...

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot&#xff0c;它能根据上下文补全代码&#xff0c;快速生成常用…...

Axure零基础跟我学:展开与收回

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...

RabbitMQ 各类交换机

为什么要用交换机&#xff1f; 交换机用来路由消息。如果直发队列&#xff0c;这个消息就被处理消失了&#xff0c;那别的队列也需要这个消息怎么办&#xff1f;那就要用到交换机 交换机类型 1&#xff0c;fanout&#xff1a;广播 特点 广播所有消息​​&#xff1a;将消息…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

未授权访问事件频发,我们应当如何应对?

在当下&#xff0c;数据已成为企业和组织的核心资产&#xff0c;是推动业务发展、决策制定以及创新的关键驱动力。然而&#xff0c;未授权访问这一隐匿的安全威胁&#xff0c;正如同高悬的达摩克利斯之剑&#xff0c;时刻威胁着数据的安全&#xff0c;一旦触发&#xff0c;便可…...

Easy Excel

Easy Excel 一、依赖引入二、基本使用1. 定义实体类&#xff08;导入/导出共用&#xff09;2. 写 Excel3. 读 Excel 三、常用注解说明&#xff08;完整列表&#xff09;四、进阶&#xff1a;自定义转换器&#xff08;Converter&#xff09; 其它自定义转换器没生效 Easy Excel在…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...

AWS vs 阿里云:功能、服务与性能对比指南

在云计算领域&#xff0c;Amazon Web Services (AWS) 和阿里云 (Alibaba Cloud) 是全球领先的提供商&#xff0c;各自在功能范围、服务生态系统、性能表现和适用场景上具有独特优势。基于提供的引用[1]-[5]&#xff0c;我将从功能、服务和性能三个方面进行结构化对比分析&#…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现&#xff0c;包括选择排序、冒泡排序、插入排序、快速排序和归并排序&#xff0c;以及每种算法的特点和复杂度分析 1. 选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每次从未排序部分选择最小元素&#xff0c;与未排…...

python读取SQLite表个并生成pdf文件

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据&#xff0c;随后读取数据&#xff0c;通过ReportLab生成横向PDF表格&#xff0c;包含格式化&#xff08;两位小数&#xff09;及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

大模型真的像人一样“思考”和“理解”吗?​

Yann LeCun 新研究的核心探讨&#xff1a;大语言模型&#xff08;LLM&#xff09;的“理解”和“思考”方式与人类认知的根本差异。 核心问题&#xff1a;大模型真的像人一样“思考”和“理解”吗&#xff1f; 人类的思考方式&#xff1a; 你的大脑是个超级整理师。面对海量信…...

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积&#xff0c;这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能&#xff0c;常用的API…...

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...

Netty自定义协议解析

目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...