- 博客(37)
- 收藏
- 关注
原创 GraphicsView
将场景放入到视图中,视图设置大小,而控制键放入frame中,frame和视图放入统一个布局。以场景的0,0为中心原点,而场景的0,0就在场景的中心,因此图元的绘制可以从负数开始绘制,通过坐标轴的方式定位。通过transform进行设置,这样每次进行对图元操作,都是从初始值进行调节。坐标系统层级:屏幕坐标 → 视图坐标 → 场景坐标 → 图元坐标。角度成员对象、缩放比例、倾斜度、视图对象、边框、图元对象。刷新固定区域,进行调整实际物体所在位置的区域的函数,图元加入场景,场景关联到视图。视图->场景->图元。
2025-11-19 11:30:42
321
原创 绘图原理双缓冲机制
pos()x()y()10050geometry()rect()size()width()height()400300快速获取尺寸代码实现:实时监测当前的坐标与尺寸的变化。
2025-11-17 21:52:49
156
原创 23种设计模式
设计模式:针对不同问题,对接口编程23种设计模式可分为三类:创建者模式、结构型模式、行为模式创建者模式有:简单工厂模式、抽象工厂模式。设计模式原则:1、开闭原则(对扩展开发、修改关闭)2、里氏代换3、依赖倒装4、接口隔离原则(使用多个接口、降低耦合度)5、合成复用原则6、迪米特法则。
2025-11-04 11:17:43
966
原创 c++特性
class 类名private:私有成员数据;私有成员函数;public:公有成员数据;公有成员函数;protected:保护成员函数;保护成员数据;private:只能在类内部使用,在外部不能使用,如果需要使用成员数据,需要通过公有函数来实现。默认不加限定词就是私有。public:作用域在类内部和外部,不受类的限制protected:作用域在类内部和派生类内部,即该类和该类的派生类其中成员函数可以在外部定义,类内部声明。
2025-11-04 10:29:05
861
原创 qt常用控件
规定:使用浮点数(二进制科学计数法),浮点数分为符号位、有效数字(二进制,0.5、0.25、0.125)、指数部分。(这套体系速度快但是对于有些小数无法精确标识,因此两个浮点数比较很容易出错,一般用做差,判定差的绝对值小于预期误差范围)夜间模式:背景色黑色,文字白色,其余都是这样,先窗口,文本、按钮。RGB表示,屏幕上的像素是包含RGB的小灯泡,用三个字节来表示RGB。日间模式:背景色亮色,文字暗色,先设置窗口的背景颜色,文本框设置白色背景,黑色文字,设置按钮颜色。分割设置之后,直接应用一套模板。
2025-10-08 15:21:35
953
原创 qt界面优化
QSS(层叠性)进行界面优化,参考网页前端CSS包括:大小、位置、颜色、背景、间距、字体等QSS设置样式的优先级最高基本语法选择器{属性名:属性值;选择器:先选择某个/某一类控件,接下来进行的各种属性设置,都是针对选中的控件生效的键值对:针对某些样式具体的设置代码实现设置局部单独控件样式设置全局单独控件的样式设置全局样式界面上所有样式都集中在一起来组织在mian中对a进行设置全局设置了全局样式,然后在某个控件中设置其它样式,两者会互不影响,进行叠加。
2025-10-07 10:24:54
916
原创 事件过滤器
1、4个QLabell(状态、3个名称)、鼠标事件、3个image对象(独立于硬件的图像表示形式,此图像可以直接访问像素数据并且可以用来绘图设备,属于QPointDevice的子类)、布局、重设事件过滤器(eventFilter)4.对图标进行安装事件过滤器,重写按下过滤器:更改状态信息和放大或缩小 重写释放鼠标过滤器:更改状态信息,还原图像。案例:通过按键指向的位置,对不同的图片实现放大或还原,通过事件过滤器监听。有自己特殊的布局结构(中心部件、菜单栏、工具栏、状态栏等),我们告诉布局它要管理。
2025-09-02 10:09:44
297
原创 qt常见控件
2.设置定时器(Qt自带了信号槽类型的定时器),QTimer这个类可以创建对象,生成timeout信号,然后通过start来开启定时器,在参数中设定触发timeout信号的周期,结合connect,在槽函数中去执行逻辑。3.新增标签页按钮的槽函数:使用addtab的方法,获取标签页的数量,参数1要创建一个Qwidget(作为标签页的类),参数2创建一个标签页的标题,在新的标签页中放入label,设置新标签页被选中,即选择新增标签页的下标。• Qt::UTC :显⽰协调世界时(UTC)。
2025-08-14 10:38:30
812
原创 LCR 008. 长度最小的子数组
3.然后找到窗口在排除,减少一个左边的数能不能满足条件,满足就可以继续减少窗口中左边的数,不满足就移动右边界,目的是为了遍历数组中每个数与之后数能不能满足条件,以此来缩小窗口大小。通过两个循环去一一寻找,即:把每个位置上的数都与它之后的数进行相加直到找到满足子数组,然后从这个每个子数组中寻找出个数最少的那个,输出它的值。1.需要一个数来存和,一个左边界和右边界,还需要一个数来存最小的个数。在暴力算法基础上修改,通过同向指针的方式。2.先循环增加r来找到第一个窗口。
2025-08-09 20:32:07
219
原创 有效三角形的个数
确定最大数,然后用双指针的方式确定区间,如果区间两端大于说,区间内所有数与右端结合都大于最大数,因此可以得到由这个区间与右端组合确定后最大数的组合个数,因此之后判断可以排除右端这个数,进一步缩小范围获得更多的组合个数。如果小于,就能排除左端那个数不符合,依次缩小区间来判断,找到合适的左边界所形成的区间组合个数。3.算法原理:三个数,知道最大的数,只需要判断其余两个数是否大于这个数,这个数都大于其余两个数,所以不用组合判断。1.遇到求组合个数的题,先进行排序。以上面的方式进行排除。
2025-08-06 18:14:40
143
原创 网络协议传输层
收到一条报文后,并不立即应答,而是等待一段时间(<超时重发等待时间),可能等待一会,用户层会拿走缓冲区的数据,这样应答的窗口大小就会变多,在根据最新收到消息的序号进行应答,这样就可以节省应答时间,提高效率,对方就可以多发几条,在延时应答时间内,可以根据容量多发几条消息,增加网络吞吐量,传送效率就变高了。报头:固定8字节,用于定制数据的大小。恢复网络过程中,采用指数级的慢启动,前期慢,后期快,其中会引入阈值,来规定达到这个阈值后,开始线性方式增长,拥塞窗口根据阈值变化,它会一直发生变化,因为网络波动的原因。
2025-06-10 10:39:34
1253
原创 网络协议的原理及应用层
session id 就是经过哈希摘要形成的,哈希摘要的搜索作用:对文件进行哈希形成摘要,保存在服务端,如果不同的客户端要对相同的文件进行存服务端,服务端会对这个文件进行哈希摘要,得到的字符串,直接在服务器中寻找,如果有直接在服务器中形成软连接,这样两个在不同的本地文件,在服务器里就变成了一个。
2025-06-01 11:35:08
1287
2
原创 多线程学习
作用:对全局变量和静态变量进行定义后,主线程和新线程会拿到各自的这个变量,地址不一样,这个操作就是线程的局部存储。pthread库(pthread_:内部有多个线程的属性(结构体)
2025-04-26 22:51:50
178
原创 c++11
右值引用模板:传左值引用,就是左值引用,传值就是右值引用,传move(左值)就是右值引用,传右值就是右值引用。利用右值引用进行移动构造,此时d作为右值返回时,没有再开临时对象了,而是调用右值引用,对使s不用构造而是直接对构造好的d进行资源掠夺,此时就是移动构造,省去了中间的临时对象构造。右值引用的变量本质是左值。但是,缺点如果返回值属于函数的内部的,如果返回引用后,还是会被销毁,因为函数的栈被销毁了,地址不存在了。如果编译器存在const左值引用,左值引用,右值引用,会构成函数重载,自动优先去匹配最优的。
2025-04-23 10:17:55
687
原创 linux 进程信号
内核态不能直接访问用户区代码,技术上可以访问,但是os不允许这样,因为如果内核态可以直接执行用户态代码的话,就没有权限限制,用户态有恶意代码,os不知道用户态的代码的好坏,会直接被执行。这个信号捕捉的过程就是,执行代码,需要进入系统时,由用户态转为内核态,去进行信号检测,接收,存储,辨别工作后,进行处理信号,如果为自定义处理,就会由内核态跳转到用户态去执行用户区中的信号处理代码,处理完后返回到内核态,然后内核态接收到返回值,就由内核态返回到用户态最初的代码执行区,期间进行了四次身份转换。
2025-04-14 10:50:16
1392
原创 map和set
其中平衡因子作用:左边加节点,减一,右边加节点,加一。如果插完且更新完,父亲节点变成-1或1说明高度改变了,就需要往上对父节点的平衡因子进行更改。如果插入之后变为0了,说明左右平衡相等,就不需要对父节点的平衡因子更改,如果变为-2或2就需要对二叉树进行旋转重新插入。AVL树的插入1、插入一个值按照二叉搜索树的规则进行找位置插入。2、新节点插入之后就会影响平衡因子,此时需要对平衡因子进行更新,并检查是否破坏了AVL树的平衡。
2025-04-08 10:42:52
879
原创 二叉搜索树
二叉搜索树又称二叉排序树。它的性质:若它的左子树不为空,则左子树上所有节点的值小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值二叉搜索树:一棵二叉树,可以为空;如果不为空,则需要:1、非空左子树的所有键值小于其根节点的键值2、非空右子树的所有键值小于其根节点的键值3、左右子树都是二叉搜索树。
2025-03-24 12:44:59
1063
原创 力扣46题全排列
这个数组中如果存放了没有被使用的数之后,然后bool类型的数组中这个位置就用true来表示已经被使用,就要进行对下一个位置的判断,这个判断还是需要从下标0来开始判断,通过这一方法进行剪枝。然后进入下一个位置choice[3],如果下一个位置超出范围就返回,回到第一层,再将一维数组的最后一个值删除,变为1,然后把这个值(2)所在位置的bool变为true表示这个数组中没有使用,然后对下一个位置choice[2]进行判断,即又进入第二轮选择13,然后对123进行判断那个值没有使用,然后进入第三层变为132。
2025-03-23 10:48:39
335
原创 多态的学习
多态是在继承关系的类对象,去调用同一函数,产生了不同的行为。比如dog,cat的声音不一样,但是都属于动物声音。隐藏(Redefinition)核心规则:派生类定义了与基类同名的函数(无论参数是否相同),导致基类同名函数被隐藏。特点:函数名相同即可触发隐藏,参数列表可以不同。基类函数在派生类作用域中不可见(除非显式调用)。
2025-03-21 16:44:29
709
原创 x的平方根
首先设定范围最低范围为0,最高为x,然后通mid=l+(h-1)/2的方式找到中间值,判断这个值的平法小于等于x,就可以将最低范围调到mid+1。如果大于的话,就将最大范围调到mid—1。不断进行循环比较,找出最佳的mid赋值给一个数,然后进行返回。判断条件则需要最低范围小于等于最高范围。一想到在一定范围内进行查找的时,我们就可以运用二分查找法来进行缩短时间复杂度。这题可以得出一个结论是在0到x中间寻找到一个数,这个数的平分且小于等于x。
2025-03-06 11:30:18
207
原创 二进制求和
因此,首先对字符串a的一个字符进行转换为数字,然后再将迭代器向前减减,得到的值再给carry,此时carry有之前的进位值已经当前位置上a的值,然后再加上当前位置上b的值。得到的就是当前位置上的和,如果对2取余,就是当前位置上的值,然后将这个值加在新创建的字符串里面。然后首先用进位制carry来接收它们相加的值,因为是逢二进一,所以需要对2取余,取到的余数就是当前位置的数字,然后用carry除以2得到的值就是进位的值。然后通过迭代器遍历的方式,对字符串的每个字符进行遍历,然后进行转换为整型相加减。
2025-03-05 12:31:31
184
原创 二叉搜索树转双向链表
我们需要将cur的left指向prev,然后prev的right指向cur,但此时prev为空则它的right不能指向cur,并且链表第一个也不能为空,然后我们就跳过将prev的右指向cur这一步,直接将cur赋给prev。其中还需要明白prev必须地址加引用,这样才能在递归中更改它的值,然后在进行往最小节点遍历时,需满足这个节点不为空,并且它的左节点不为空,当不满足时,就说明已经找到了最小节点,或者这个节点一开始就是空,没有内容。这是就可以将prev的右指向cur,cur的左指向prev。
2025-03-04 11:21:48
299
原创 二叉树的最近公共节点祖先
当把节点的左子树的节点传进来寻找n的时候,如果遍历完了还没找到就返回false,其次没遍历完时,就进行判断,首先遍历左子树的左边节点,其次遍历左子树的右边节点。所以可以先将q去这个节点的左子树进行寻找,如果左子树不存在,那么一定是在这个节点的右子树,p节点也是如此去寻找。当传递一个根节点进去的时候,我们需要去判断,q和p是在左子树,还是右子树。如果q是在这个节点的左右子树中,p则在与q相反的节点中时,说明这个节点便是最近的相交节点。1.如果遇上这个节点的左节点是p或q,右节点是q或q,就可以返回这个节点。
2025-03-03 11:22:34
258
原创 二叉树的层序遍历
然后我们要将出的数据的结果存放于新建的数组中,当循环完之后,这一层的数据都放入了数组中,并且,这一层数据的左右节点全部放入了队列中。当实现层序遍历时,可以想到创建一个存二叉树节点的queue(队列),因为它的作用是前进先出,这样就可以八叉树中从上到下一一插入然后再一一退出,用一个数组来存放每一层的节点数据,最后将所有数组放入一个数组中形成二维数组的结构。出一层循环后,将数组放入二维数组中,便得到了一层的数据,再进行下一层的每个节点的遍历,进行对数组存数据,以及对队列加入它的左右节点,删除它本身。
2025-03-02 10:59:28
284
原创 根据二叉树创建字符串
会发现需要先对左节点进行遍历,并且输出它的每一个的值,并且每个值输入后会加上一个'(' 直到从最初始的根到最后一个左子树的节点遍历完了之后,再加上’)' ,然后等所有的括号返回完之后,再从右节点进行一一递归,也需要加上括号。6.此时当最后一个父节点左边遍历后,返回之后,执行这个代码,将这个父节点的右节点的数值进行插入,这时候返回说明这一层节点插入完毕,返回它的字符串,然后再返回到上一层节点,再将属于上层节点的剩下语句内容运行,从而实现前序遍历。然后在观察题目,再根据测试用意来进行分析。
2025-03-01 13:16:12
334
原创 c++的继承
概念a.父类(基类):被继承的类b.子类(派生类):继承之后的类目的:继承机制是面向对象程序设计使代码可以进行复用的一个方式。它允许程序程序员对原有类进行扩展,增加功能,产生新的类。定义格式:class 派生类名:继承方式(public,private,protected) 基类访问限定符的权限:继承方式:22。
2025-02-22 16:45:48
581
原创 Leetcode第二题两数相加
此时如果head还是为空就说明还没有在新链表存入任何数据,需要开个新空间,tail和head都指向它,再加上c++构造函数时就可以传值,可以将他们的和的个位数传入,取它的个位数就是这个位置的值,而十位数就需要下对一个节点的进位。则需要创建一个新的链表来接收相加之后的值,并且需要存储这个链表的头节点进行返回。其次接收l1和l2的值的方式是,如果他们的节点不为空,就接收他们的值否则为0。然后需要两个整型来接收两个需要相加链表每个节点的值,以及他们相加后进位的值。接下来就需要将进位值与节点的值相加就是和。
2025-02-04 11:54:35
293
原创 Linux进程2
区域划分:运用数据结构,来划分每个需要存放指定数据的区域start,end起始地址,区域当中每一个数字都是地址区域调整:就是更改数据结构中每个区域的start,和end其中的共享区是为了调节栈和堆的缓存地带,本质就是为了区域调整。1.地址空间的基本空间大小是字节2.32位下,即为2的32次方个地址=4GB的空间范围3.每个字节都有一个唯一的地址,地址要保证唯一性。4.要表示这么大的空间,32位的数据(二进制)即可达到这种空间,且不重复。
2025-01-16 10:31:32
1021
原创 Linux的基本指令2
语法:ls [选项][文件目录名字]功能:对于目录,该命令是列出该目录的子目录和文件。对于文件,将列出文件名以及其他信息。选项* -a 列出所有文件。*-r 对目录反向排序*-t以时间排序*-l列出文件的详细信息*-R列出所有子目录下的文件。*-la 可以看见隐藏文件*-Rl 先显示目录属性,再显示目录下文件的属性*ld 文件名 显示文件的属性。
2024-12-12 09:22:43
836
原创 Linux基本 工具
下载:先从远端服务器上通过互联网下载软件包,下载了软件后,安装,安装的本质是拷贝,拷贝到目录中。yum:是Linux下常用的一种包管理器。主要应用在fedora,redhat,centos等发行版上。yum remove 是删除,yum install 是下载。
2024-12-05 11:13:56
949
原创 文件的一些命令
我们程序数据需要输出到外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员堆各种设备进行方便操作,我们抽象出流的概念,我们往流输入,再从流读取数据。fgets(字符数组的指针,个数,流)与fopen(文件名,“r”)搭配,如果个数是n,但是只能读到n-1个,如果文件换行了,读下一行的话需要在写一次fgets。在内存中创建一个文件信息区,文件信息区与创建的文件有关联,pf可以通过文件信息区找到文件进行操作,打开成功为文件信息区的起始地址,打开失败时NULL.
2024-11-10 15:02:15
954
原创 数据结构排序
排序:排序,是将一段数据,按照关键字的大小进行排列序。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存上,根据排序过程的要求不能再内存之间移动数据的排序。
2024-10-27 14:14:32
965
原创 数据结构二叉树
概念:数是一种非线性的数据结构,根在上,节点在下。节点的度:一个节点含有的子树的个数称为该节点的度。叶节点:度为零的称为叶节点。父节点:一个节点含有子节点,这个节点就是其子节点的父节点。子节点:一个节点含有的子树的根节点就是该节点的子节点。兄弟节点:具有相同父节点的互称兄弟节点。节点的层次:从根开始定义,根为第1层,根的子节点为第2层。结构:空树是唯一一个节点指向空。根节点在最上方第一个,没有子节点的节点是叶子节点。父结点是子结点的上一层。任何一颗树都可以看做根和他的子树构成。
2024-10-13 19:51:05
435
原创 线性表-栈1和队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进出FIFO入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为对头。栈:一种特殊的线性表,其只允许在固定的另一端进行插入和删除元素操作。进行数据的插入和删除操作的一端称为栈顶,另一端称为栈底。队列也可以数组和链表的结构实现,但链表更佳,因为删除队列的头部。压栈:栈的插入操作叫做进栈或压栈,入数据的地方在栈顶。栈的实现可以通过数组和链表来实现,但数组为最佳。出栈:栈的删除操作叫出栈。2.队列的表示和实现。
2024-09-08 14:53:37
542
原创 函数的了解
光靠常用的库函数不能做出需要的代码,所以需要自定义函数。库函数与自定义函数的概念是一样的。需要函数名,返回值类型,函数参数。但是自定义函数需要靠程序员自己设计来完成相应的工作。
2024-08-29 15:53:57
530
原创 时间复杂度和空间复杂度的计算
在计算机中时间复杂度是一个函数,它定量描述算法的运行时间。一个算法所消耗的时间,从理论上来说无法进行计算,只有在计算机上进行运行才能知道。因此,在我们不能上机时也需要计算的时候,因为语句的执行次数与算法所花费时间成正比,就可以根据算法中的基本操作执行次数来计算算法的时间复杂度。
2024-08-29 15:53:43
707
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅