- 博客(56)
- 收藏
- 关注
原创 【STM32 基础复习 01】初识 STM32F103ZET6:型号、封装、引脚编号与特殊引脚
本文是“嵌入式基础学习”系列的第一篇,内容覆盖课件《初识 STM32F103ZET6》第 1~18 页,并结合 ST 官方数据手册和 RM0008 参考手册校正细节。
2026-07-26 18:38:32
271
原创 ButtonGroup、DelayButton、Switch、ProgressBar 与 BusyIndicator
这一节课主要围绕 Qt Quick Controls 中的常用控件展开。它们看起来都是比较简单的 UI 控件,但在实际项目中,尤其是车载 HMI、设置页面、加载页面、进度展示页面里,非常常见。用来管理一组互斥按钮,通常搭配使用。可以实现“长按一段时间后才触发”的防误触按钮。Switch用来表示开关状态,核心属性是checked,实际项目中通常需要自定义样式。用来展示进度,核心属性包括fromtovalue和position。用来表示加载中、等待中,核心属性是running。
2026-07-13 21:45:49
191
原创 Qt Quick 常用控件入门:Window、Button、CheckBox 与 RadioButton
真实项目中,很少直接使用默认按钮样式。尤其是车载 HMI,按钮通常来自 UI 设计稿,需要自己定义背景、圆角、图片、文字样式和状态变化。Button {id: rootwidth: 180height: 56text: "播放"radius: 8background控制按钮背景。控制按钮文字。root.down判断按钮是否处于按下状态。课程重点强调了CheckBox自定义样式的必要性。Qt Quick 自带的CheckBox样式依赖平台,视觉效果比较基础。
2026-07-04 18:51:58
207
原创 Qt Quick 综合开发复习:自定义组件、Loader 与 HarmonyUI 实战
Qt Quick 里有很多原生控件,但实际项目中经常会遇到“原生控件不完全满足需求”的情况。从顶部下滑,唤出控制中心。从底部上滑,返回桌面或查看后台。左右滑动,切换页面。这些都可以用MouseArea的按下、移动、释放事件来模拟。SwipeAreaMouseArea + 坐标记录 + 阈值判断 + 自定义信号Qt Quick Controls 里有原生Button自定义背景色。自定义按下颜色。自定义圆角。自定义字体。自定义图标。自定义点击信号。所以可以用Rectangle。
2026-07-04 18:37:58
212
原创 Qt Quick 综合开发复习:自定义组件、Loader 与 HarmonyUI 实战
Qt Quick 里有很多原生控件,但实际项目中经常会遇到“原生控件不完全满足需求”的情况。从顶部下滑,唤出控制中心。从底部上滑,返回桌面或查看后台。左右滑动,切换页面。这些都可以用MouseArea的按下、移动、释放事件来模拟。SwipeAreaMouseArea + 坐标记录 + 阈值判断 + 自定义信号Qt Quick Controls 里有原生Button自定义背景色。自定义按下颜色。自定义圆角。自定义字体。自定义图标。自定义点击信号。所以可以用Rectangle。
2026-06-29 22:41:05
229
原创 Qt Quick 开发教程整理Transition、Repeater、Anchors、MouseArea
Transition可以让控件移动、显示、隐藏、颜色变化更加自然,但不要滥用动画。Repeater适合创建大量相似控件,核心是model和delegate。Anchors是 Qt Quick 中非常重要的布局方式,应重点掌握。MouseArea是交互开发的核心,需要熟悉各种事件之间的区别。实际开发时,应优先保证界面流畅和逻辑清晰,再考虑动画和复杂交互效果。Transition可以让控件移动、显示、隐藏、颜色变化更加自然,但不要滥用动画。Repeater适合创建大量相似控件,核心是model和。
2026-06-28 11:13:24
186
原创 Row、Column、Grid、Flow 与布局过渡
Qt Quick 提供了多种布局方式,每种布局都有自己的适用场景。Row和Column是最基础、最常用的布局方式,适合大多数简单界面。Grid适合规则的网格结构,尤其是等宽等高的项目。Flow适合需要自动换行的特殊场景,但不适合要求位置完全固定的界面。Transition则可以在布局变化时增加动画效果,让界面交互更自然。在实际开发中,不应盲目使用复杂布局,而应该根据界面需求、性能要求和后期维护成本选择合适的布局方式。
2026-06-23 22:49:58
254
原创 Label、TextInput、TextEdit整理
纪要中提到:可以在窗口底部使用Label构建按钮,例如显示齿轮图片,设置为,按钮大小为50x50,水平居中,并设置边距为100。Window {width: 700title: "Label 自定义按钮"Label {width: 50height: 50// 使用图片作为按钮外观// 点击按钮时打印信息// 按下时降低透明度,释放后恢复TextInput本身外观比较简单,所以实际开发中通常会使用Rectangle作为背景。
2026-06-22 22:49:25
157
原创 Rectangle、Text 与 Label
使用 Rectangle 作为背景;使用 Text 显示按钮名称;使用 MouseArea 处理点击;按下时改变颜色;释放后恢复颜色;点击后通过输出信息。负责绘制矩形、背景、边框、圆角和渐变。Rectangle负责绘制界面形状,Text负责显示基础文字,Label负责显示带背景、边距和控件样式的文本标签。
2026-06-21 19:54:20
231
原创 Item 基类与常用属性详解
分类属性作用几何xy设置坐标几何widthheight设置尺寸几何z设置堆叠顺序布局anchors设置相对布局转换scale设置缩放比例转换rotation设置旋转角度可视化opacity设置不透明度可视化visible控制显示或隐藏可视化clip裁剪超出范围的子对象可视化smooth平滑显示可视化启用抗锯齿控制enabled控制是否可以交互焦点focus设置键盘焦点状态statestates管理对象状态自定义组件经常以Item作为根对象。下面创建一个简单的自定义按钮。
2026-06-21 12:31:06
250
原创 Qt Quick 学习笔记:枚举、数据类型、JavaScript 与自定义组件
本篇整理 Qt Quick 开发中关于枚举、QML 数据类型、JavaScript、自定义组件、作用域以及代码风格的基础知识。这些内容主要用于帮助我们进一步理解:QML 中的数据如何保存、界面逻辑如何处理,以及重复界面如何封装成组件。枚举用于定义一组固定的、具有明确名称的选项。手机电脑显示器音箱0123代码的可读性会比较差。SmartphoneComputerScreenSpeakerenum新建QtObject {Apple,Banana,Orange这里定义了一个名为。
2026-06-20 21:40:02
278
原创 Qt Quick:附加属性、函数与信号详解
附加属性本质上也是一种属性,只不过它不是普通对象自身直接声明出来的属性,而是:某些特定类型,为对象额外提供的一组属性或信号处理能力。对象除了自己的普通属性之外,还能“额外拿到”的属性或信号处理器。例如在ListView这里的就是ListView提供的附加属性。函数 = 方法封装逻辑处理运算响应事件提高代码可读性避免把大量逻辑写在一行里200信号可以理解为:对象在某个事件发生时发出的通知。event(事件)消息通知某种“触发器”例如按钮被点击时,就会发出点击相关的信号。
2026-06-20 15:16:30
336
原创 Qt Quick:Import、ID 与 QML 属性详解
如果自定义组件和当前文件位于同一个目录,通常可以直接使用,不需要再次写import。MyProject/Button {width: 140height: 45text: "自定义按钮"在Main.qmlWindow {width: 800属性用于保存或描述对象的状态。width: 200widthheightcolorvisible都是属性。固定值;表达式;其他对象的属性;JavaScript 函数返回值;动态绑定结果。QML 中可以通过property。
2026-06-20 11:32:02
380
原创 QML语法基础介绍
属性用于描述对象的状态和外观。width: 200width:宽度height:高度color:颜色opacity:透明度Button {width: 120height: 40text: "确定"属性作用width设置宽度height设置高度x设置水平方向坐标y设置垂直方向坐标color设置颜色text设置文本visible控制是否可见opacity设置透明度设置字体大小除了 QML 对象自带的属性,还可以通过property定义自定义属性。
2026-06-20 10:12:56
230
原创 问卷考试系统-测试报告
1、项目背景一、报告概述1、项目背景问卷考试系统是一款基于Web的在线测评平台,主要用于:创建和管理各类问卷及考试、组织在线问卷考试和练习、收集和分析调查数据管理题库和试题资源。该系统面向教育机构、企业培训部门和市场调研机构,提供从问卷/考试创建、发布、答题到结果分析的全流程解决方案。系统包含以下核心模块:用户管理:注册、登录、权限控制问卷/考试管理:创建、编辑、发布、统计分析题库管理:试题创建、分类、导入导出练习系统:错题管理、练习记录模板管理:问卷/考试模板的创建添加共享。
2025-09-18 20:54:10
1086
1
原创 搜索二叉树的实现以及一些重点接口的实现思路(包含递归以及非递归版本的实现)
第三种才是直接删不好删的,我们可以使用一个替换法,我们知道二叉搜索树的概念是它的左子树永远是比根小的,右子树是比根大的,我们可以根据这个性质去左子树的里面去找他的最大的那个树也就是左子树的最右子树是左子树最大的,或者去右子树里面去找右子树中最左子树的那个节点;实现思路:二叉搜索树要满足根的左子树要比根要小,右子树要比根要大;我们之前都是借助递归来实现的,因为比较简单,我们想要实现非递归我们得知道我们在递归的时候是怎么访问呢?若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。
2025-04-21 20:32:14
433
原创 C++多态知识点梳理
多态的构成条件首先构成多态的要满足俩种条件:1 被调用的函数必须是虚函数,且必须派生类的虚函数进行重写2 必须是父类的指针或者引用;什么是虚函数呢?就是在普通的成员函数前面加上virtual关键字,就会变成虚函数(注意一定是成员函数)。普通函数是不行的。虚函数的重写:虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。派生类被调用的虚函数可以不加virtual。
2025-04-14 21:54:28
967
原创 c++中继承方面的知识点
继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。例如下面的代码中就是使用了继承的语法知识。public:protected:// 姓名//子类protected:int _stuid;// 学号//子类。
2025-04-12 18:38:27
1054
原创 STL中stack,queue,privority_queue,反向迭代器的模拟实现
Container = deque这个叫做适配器,是一种复用。一、基本概念栈是一种**后进先出(LIFO, Last In First Out)的线性数据结构,仅允许在同一端(栈顶)**进行插入和删除操作。其核心操作包括:入栈(Push):向栈顶添加元素出栈(Pop):移除栈顶元素查看栈顶(Peek/Top):获取但不移除栈顶元素二、核心特性操作受限 只能访问栈顶元素动态大小 栈空间可动态扩展(链式栈)或固定大小(数组栈)
2025-04-08 21:46:29
1020
原创 linux之进程控制
我们都知道main函数是代码的入口,但实际上main函数只是用户级别代码的入口,main函数也是被其他函数调用的,例如在VS2013当中main函数就是被一个名为__tmainCRTStartup的函数所调用,而__tmainCRTStartup函数又是通过加载器被操作系统所调用的,也就是说main函数是间接性被操作系统所调用的。而对于父进程来说,子进程是需要被标识的,因为父进程创建子进程的目的是让其执行任务的,父进程只有知道了子进程的PID才能很好的对该子进程指派任务。新进程为子进程,而原进程为父进程。
2025-04-02 22:29:02
1527
原创 STL中List的模拟实现
之前我们在实现string,vector的时候我们迭代器都没有都是他们的原生指针,在这边为什么要封装成一个类呢?首先string,vector他们本质上是一个数组,在空间上是连续的,我们指针++一个以后就到了下一个元素的位置。因此我们可以使用原生指针来实现。而一个结点需要存储的信息有:数据、前一个结点的地址、后一个结点的地址,于是该结点类的成员变量也就出来了(数据、前驱指针、后继指针)。list是一个带头双向循环链表,在构造一个list对象时,直接申请一个头结点,并让其前驱指针和后继指针都指向自己即可。
2025-04-02 20:44:14
475
原创 STL中vector模拟实现
insert()的写法,以前的写法就是给一个下标pos的位置,然后删除对应pos位置上的数据,而现在这个pos变成了指针,我们在使用指针插入对应数据的时候,特别容易出现迭代器失效的情况,也就是野指针的行为,为啥呢?resize函数实现的思路就是当输入n小于当前内存的时候我们就不需要初始化,并且跟新一下_finish=_start+n,,当大于的时候就需要分俩种情况,一种是当vector为空的时候,我们就直接在头部开始插入数据,第二种就是本来就有数据,需要尾插数据一直达到n个大小。这个很简单直接放代码。
2025-03-26 19:51:05
1104
原创 vector的介绍和使用
1、vector是表示可变大小数组的序列容器。2、vector就像数组一样,也采用的连续空间来存储元素,这也意味着可以采用下标对vector的元素进行访问。3、vector与普通数组不同的是,vector的大小是可以动态改变的。4、当vector需要重新分配大小时,其做法是,分配一个新的数组,然后将全部元素移到这个数组当中,并释放原来的数组空间。5、vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因此存储空间比实际需要的存储空间一般更大。
2025-03-24 19:43:11
1297
原创 stl之string的详解
string();使用示例int main()string s1;//字符串//用s2来初始化s3;//从s2的位置开始,不写长度默认就是npos;//拷贝5个字符长度//拷贝10个字符return 0;
2025-03-16 22:44:22
660
原创 算法之双指针
如何做到划分区间呢?首先我们让dest放在-1的位置上,然后让cur从左向右遍历数组,在遍历过程中遇到俩种情况:第一种就是遇到零元素第二种就是遇到非零元素。我们cur遇到零元素的时候不处理,++cur,遇到零元素的时候,我们可以dest++一下,然后把nums[dest]和nums[cur]的位置交换一下,然后在++cur一下就行。
2025-03-16 13:47:55
303
原创 Shell的运行原理以及Linux当中的权限问题
我们之前学的指令就也叫命令解释器,我们所有的指令最终都要在os的内部运行,但是os使用难度较高,我们用户不能直接和os打交道,因此我们通过命令行解释器或者图形化界面和操作系统打交道。这个粘滞位:给目录设置,一般是共享文件,大家可以在目标内进行各自的文件的增删查改,只允许所拥有者能删这个文件,其他人一概不允许,t是一种特殊的x权限。账号的切换是不受约束的,su 用户名直接进去。在root的用户下 使用su 普通用户是不要输入密码的,直接就可以进入,如果是普通用户的话就需要输入对应账户的密码了。
2025-03-08 21:27:29
1159
原创 c++类与对象(上)
类的两种定义方式:1、声明和定义全部放在类体中。需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、声明放在头文件(.h)中,定义放在源文件(.cpp)中。我们一般喜欢采用第二种。
2025-03-06 11:55:10
988
原创 linux的常见指令操作
在Windows中我们可以通过Ctrl+C和Ctrl+V将一个地方的文件或目录复制一份到另一个地方,我们若是在Linux当中想要完成该操作,就要用到cp指令。1)-p dirname可以是一个路径名称,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。-r 或 -R 递归处理,将指定目录下的文件与子目录一并处理,若源文件或目录的形态不属于目录或符号链接,则一律视为普通文件处理。1)当第二个参数是不存在的名称时,mv指令完成文件重命名或目录重命名。
2025-03-05 22:04:50
937
原创 c++入门
编译的时候会显示命名冲突,原因头文件展开的时候跟库里面的函数名相同了,或者有时候不同的工程合并的时候会有互相之间冲突,因此命名空间的作用就是为了解决这些问题存在的。上面的代码从函数的重载的定义的上看是构成函数重载的,但是我们编译的时候会报错,会构成调用其义。这样子就解决了命名冲突的问题,命名空间里面的编译器一般不会主动去访问,要访问有俩种方法一种是直接展开,还有一种是指定访问命名空间域。缺省参数是声明或定义函数时为函数的参数指定一个缺省值。缺省参数分为全缺省以及半缺省;namespace+命名。
2025-03-02 13:36:50
280
1
原创 数组相关的面试题
在这个题目中我们这样比较会发现一个问题这样子比较就会变成1 2 2 2 2 2 5 6不符合题目的要求了,我们可以从后面往前面比较就行了,然后按照归并算法的要求,从前往后往前是比较小的,从后往前我们可以比较大的,这样的话,我们还是递增的了。在图中我们可以发现一直到end2结束,这个就基本归并结束了,但是假如我们换个数据将end2换成-1 -2 7我们可以发现end2结束不了,end1先走完了,因此我们要考虑俩种情况。
2024-11-18 12:50:50
393
原创 顺序表的详解——初始化,销毁,打印,增加,删除,查找以及修改等功能
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。1我们可以发现顺序表其实就是在数组中管理数据的,那跟数组有什么区别呢,就是数组大小是固定的,而顺序表的长度是可以动态增长的2。
2024-11-17 21:23:42
1000
原创 转轮数组(C语言实现)
方法一我们可以先把数字1 2 3 4逆转一下,第二步我们可以逆转一下5 6 7,最后整体逆置一下就会变成上面的数字。begin++;end--;int i = 0;for (i = 0;i < sz;这种方法我们一般都不太好想出来,但是还有简单的方法就是我们开辟一个数组空间出来.
2024-11-16 11:54:05
537
原创 消失的数字(c语言实现)
方法一我们使用异或操作符实现。介绍一下^操作符性质就是首先0^a=a;a^a=0;然后异或操作符还满足交换律。比如a ^ b ^ c ^a= a ^ a ^b ^c;我们可以通过这样的性质实现这个代码,上面的题目中我们发现数组中缺少一个元素2,我们通过这样的方式来我们先把数组中的数字遍历一遍,然后在遍历一遍0到n的数字。int i = 0;for (i = 0;i < sz;i <= sz;return val;
2024-11-15 11:13:59
618
原创 文件操作(4)
在文件操作函数(二)中,我们介绍了文件的顺序读写函数,即挨着顺序对文件中的数据进行输入或输出操作的函数。但是若只能规规矩矩地,从前到尾对文件进行输入输出操作,那么就比较笨拙,为了能更加灵活地对文件进行输入输出操作,出现了另一类文件操作函数,使得我们可以对文件进行随机读写。
2024-11-11 17:23:15
1024
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅