README
# 专栏笔记总结大全
# 01.Qml基础概念
- 1.1.1 什么是QT:Qt是一个跨平台的C++图形用户界面应用程序框架。
- 1.1.3 QT的版本:
- 1.2.1 QT核心模块:core是核心框架,GUI是图形界面框架,Network是网络编程框架,SQL数据库框架等。
- 1.2.2 安装QT框架:用于开发和运行基于 Qt 的应用程序。开发者可以使用 Qt 框架编写跨平台的 C++ 程序。
- 1.2.3 开发须知:开发者需要同时安装 Qt 框架 和 Qt Creator,因为 Qt Creator 依赖于 Qt 框架来编译和运行程序。
- 1.4.1 环境准备:
- 1.6.1 Quick概念:它专注于快速开发流畅、动态的 UI,特别适合移动应用、嵌入式设备和桌面应用。用QML!
- 1.6.2 Quick模块:提供了基本的 UI 元素(如
Rectangle、Text、Image等)和布局功能。 - 1.6.3 Quick优势:1.声明式语法和丰富的 UI 元素加速开发;2.基于 OpenGL 渲染,适合高性能 UI。
- 1.6.4 Quick技术:1.QML是用户界面的标记语言;2.javaScript是动态脚本语言;3.QT C++是高度可移植的增强型C++库。
- 1.6.5 CMakeList:
CMakeLists.txt通过这个文件,CMake 可以正确配置和构建你的 Qt Quick 应用程序。 - 1.7.2 编写QML代码:打开
main.qml文件(位于Sources目录下)开始写代码。这个是入口! - 1.7.3 QGuiApplication:管理GUI应用程序的控制流和主要设置。它处理事件循环,是整个应用程序的核心。
- 1.7.4 QQmlApplicationEngine:它是 QML 引擎的封装,提供了简单易用的接口来加载 QML 文件并管理应用程序的生命周期。
- 1.7.5 QQmlContext:是 Qt QML 框架中的一个核心类,用于管理 QML 对象的上下文环境。
# 02.Qml基础语法
- 2.1.1 QML是什么:它是一种声明式语言,语法简洁直观,用于描述用户界面和交互逻辑。
- 2.1.2 QML文件结构:一个 QML 文件通常由以下部分组成,1.导入语句;2.根元素,3.子元素。
- 2.2.1 import导入——
import语句通常遵循以下格式:基本语法:import <模块名> [版本号] [as <别名>] - 2.2.2 导入标准QML模块:例如
QtQuick和QtQuick.Controls。这些模块通常包含常用的 QML 类型和组件。 - 2.2.3 导入自定义QML文件:
- 2.2.4 使用别名导入模块:通过
as关键字为模块指定别名,避免命名冲突或简化使用。 - 2.2.5 导入JavaScript文件:假设有一个名为
utils.js的文件,可以这样导入:import "utils.js" as Utils - 2.3.1 QML类型系统——基本类型:QML 提供了一些基本的内置类型,用于表示常见的数据类型和 UI 组件。主要有:数据类型,几何类型等。
- 2.3.2 JavaScript类型:
- 2.3.3 对象类型:QML 对象通常由类型名称、属性、信号和方法组成。一个对象可以嵌套其他对象,形成层次结构。
- 2.4 对象特性:对象特性包括:属性、信号、方法、绑定、状态等。
- 2.4.1 id特性:保持唯一,通过
id,可以方便地引用和操作对象,实现属性绑定、信号连接、动态对象创建等功能。 - 2.4.2 属性特性:属性是对象的核心特性,用于存储数据或配置对象的行为。比如:
width,height,visible等。 - 2.4.3 信号和信号处理器特性:信号是 QML 对象的事件机制,用于通知其他对象某些事件发生。
- 2.4.4 方法特性:方法是对象的行为特性,用于定义可执行的操作。可以通过
function关键字定义方法。 - 2.4.7 状态控制:状态是 QML 对象的特性之一,用于定义对象的不同配置。通过状态,可以轻松切换对象的属性值或行为。
- 2.5.1 在QML中用JavaScript:可以在 QML 对象中定义 JavaScript 函数,用于封装逻辑。
- 2.5.2 导入JavaScript文件:在qml中导入JavaScript文件。使用
import关键字导入外部 JavaScript 文件。 - 2.5.3 JavaScript与QML交互:JavaScript 可以直接访问 QML 对象的属性和方法,也可以通过信号与 QML 对象交互。
- 2.5.3.1 访问QML对象属性:
- 2.5.3.2 调用QML对象方法:
- 2.5.3.3 信号与JavaScript交互:
- 2.5.4 JavaScript模块化:通过外部 JavaScript 文件,可以实现模块化开发,将逻辑分离到不同的文件中。
- 2.5.5 JavaScript作用域:1.函数内部定义的变量只能在函数内访问。2.外部 JavaScript 文件中的函数和变量可以被 QML 全局访问。
- 2.5.6 JavaScript性能优化:
- 2.6.7 QML的国际化:
- 2.6.8 QML的编码约定:
# 03.Quick基础
- 3.1.1 Item:它是所有可视化元素的基类,但本身并不直接绘制任何内容。
Item提供了一个容器和布局的基础,用于组织和管理其他可视化元素。 - 3.1.2 Text:
Text类型允许你在用户界面中显示静态或动态文本,并提供了许多属性来控制文本的外观、样式和布局。 - 3.1.3 TextInput:
TextInput类型允许用户在应用程序中输入文本,并提供了许多属性和信号来管理和响应用户输入。 - 3.1.4 TextEdit:允许用户在应用程序中输入、编辑和显示多行文本内容,并提供了许多属性和信号来管理和响应用户的文本操作。
- 3.2 布局管理:布局管理是用于组织和排列界面元素的核心机制。
- 3.2.1 容器Rectangle:是一个常用的 QML 类型,用于创建矩形形状的图形元素。可以设置矩形的宽度、高度、颜色、边框等属性。
- 3.2.2 基于锚的布局:使用 Anchors 可以实现相对定位,将元素相对于其他元素或父元素进行定位。
- 3.2.3 定位器:提供了几种基本的布局类型,如 Column、Row、Grid 等,用于垂直、水平和网格布局。
- 3.3.1 键盘输入概念:
Keys附加属性:用于捕获和处理键盘事件。 - 3.3.4 键盘注意事项:1.焦点管理;2.快捷键冲突;3.平台差异;4.性能优化。
- 3.4 事件处理:提供了事件处理器(Event Handlers)来直接处理特定事件。事件处理器以
on开头,后跟事件名称。 - 3.4.1 MouseArea事件:可以附加到任何可视元素(如
Rectangle、Image等),用于监听鼠标点击、拖动、悬停等操作。 - 3.4.3 触摸事件:使用
MultiPointTouchArea处理多点触摸事件,它允许你处理多点触摸事件,如缩放、旋转等。 - 3.4.4 手势识别:提供了手势识别器(Gesture Recognizers)来处理复杂的手势,如滑动、捏合等。
- 3.4.5 自定义事件:
- 3.4.6 事件传播:事件会从子元素向上传播到父元素,直到被处理或到达根元素。使用
event.accepted = true阻止事件继续传播。 - 3.4.7 事件过滤器:
- 3.5 动态加载组件:根据具体需求选择合适的方法,可以高效地实现 QML 中的动态创建功能。
- 3.7.1 组件创建和销毁:
Component.onCompleted在组件完全初始化并准备好后触发。onDestruction:在组件即将被销毁时触发。 - 3.7.2 页面加载:当页面被加载到视图或窗口时,
Page.onStatusChanged,表示当页面的状态发生变化时触发(如加载、显示、隐藏等)。 - 3.7.3 页面显示:
Item.visibleChanged:当visible属性发生变化时触发。 - 3.7.4 页面激活:例如在
StackView或TabView中切换页面。Page.onActivated:当页面被激活时触发。Page.onDeactivated:当页面被停用时触发。 - 3.7.5 页面销毁:当页面被销毁或从内存中移除时。
Component.onDestruction:在组件即将销毁时触发。 - 3.7.6 动态加载和卸载:当使用
Loader动态加载或卸载组件时。Loader.onLoaded:当组件加载完成时触发。Loader.onItemRemoved:当组件被移除时触发。 - 3.7.7 窗口生命周期:当窗口被创建、显示、隐藏或关闭时。
Window.onVisibleChanged:当窗口的可见性发生变化时触发。 - 3.7.8 状态管理:当组件的状态发生变化时。
State.onCompleted:当状态完全应用时触发。 - 3.8 异步编程技巧:异步编程是处理耗时操作(如网络请求、文件 I/O、复杂计算等)的关键技术,以避免阻塞 UI 线程,保持界面的流畅性。
- 3.8.1 WorkerScript:
- 3.8.2 Timer定时器:是一种用于执行周期性任务或延迟任务的组件。它可以在指定的时间间隔内触发事件,非常适合用于动画、轮播、数据刷新等场景。
# 08.多媒体应用
# 09.QML和C++
- 9.1.1 QML和C++概念:开发者将 QML 的灵活性和易用性与 C++ 的强大功能结合起来。qml专注UI,c++专注业务逻辑。
- 9.1.2 两者为何集成:通过集成,QML 可以专注于界面设计,而 C++ 负责处理复杂的逻辑和性能优化。
- 9.1.3 集成方式说明:
- 9.1.4 有哪些场景用:1.复杂数据处理与可视化;2.数据库与持久化存储;3.本地系统接口访问等等。
- 9.2.1 属性绑定:使用
Q_PROPERTY将C++属性暴露给QML。 - 9.2.2 方法调用:使用
Q_INVOKABLE标记可被QML调用的方法。 - 9.2.3 信号-槽系统:C++信号触发QML函数执行。在C++中触发,在Qml中监听函数执行。具体用到
Connections。 - 9.3.1 将C++注册到QML:本质是在QML运行环境中暴露C++类的接口,使这些C++对象能被QML识别、访问和操作。
- 9.3.2 注册上下文属性:将C++对象实例注册为全局可访问属性,
setContextProperty() - 9.3.3 注册QML类型:通过
qmlRegisterType或qmlRegisterSingletonType,可以将 C++ 类注册为 QML 类型。 - 9.3.4 生命周期管理:上下文属性这种是持久性服务,全局控制器;注册QML类型是临时组件,视图相关对象。
- 9.3.5 注册调试技术:
- 9.3.7 两种注册比较:暴露一个全局对象,使用
setContextProperty。创建可复用的组件或在 QML 中动态创建对象,使用qmlRegisterType。 - 9.4.1 信号槽设计-基本通信模型:信号槽机制是支撑QML与C++无缝集成的核心通信系统,其设计允许跨越C++和QML边界进行双向通信。
- 9.4.2 信号槽核心特性:
- 9.4.3 C++到QML通信:1.c++定义温度变化信号槽方法;2.将c++注册到qml;3.在qml中触发c++方法,然后监听信号槽信息。
- 9.4.4 QML到C++通信:1.c++定义登录处理槽函数,登录结果信号;2.注册;2.在qml触发登陆处理函数,使用
Connections监听登陆结果信号。 - 9.4.5 信号参数处理机制:string转化为QString,list转化为QVariantList,var转化为QVariant等等。
- 9.4.6 高级连接技术:
- 9.4.7 信号槽优化策略:
- 9.4.8 信号槽调试:
- 9.4.9 信号槽最佳实践:C++信号使用camelCase命名(如
dataReceived);QML处理器信号名首字母大写加on前缀(如onDataReceived)。 - 9.5.1 在C++中操作QML-获取QML对象:通过对象名查找,QObject button = rootObject->findChild<QObject>("submitButton");
- 9.5.2 操作QML属性与方法:1.属性操作,主要是设置属性,读取属性;2.方法调用,主要是调用无参方法,带参方法。
- 9.5.3 信号与事件处理:
- 9.6.1 用户登录功能-C++定义登录逻辑:在C++定义登录逻辑,使用
Q_INVOKABLE。 - 9.6.2 注册并暴露登陆:在
main.cpp中注册并暴露AuthManager。 - 9.6.3 QML实现登录界面:直接调用 authManager.login(username, password)
上次更新: 2026/06/10, 11:13:41