- 博客(93)
- 收藏
- 关注
原创 C++打地鼠游戏一小时极限开发
main函数调用,单击按钮播放背景音乐。在初始化的时候就给按钮绑定回调函数。false代表当前位置没有地鼠。菜单和进入游戏之间的逻辑。砸中地鼠得分,没砸中减分。介绍按钮弹出信息弹窗。
2024-12-15 01:04:40
2538
4
原创 Qt 手写一个电脑截图工具
创建一个sinpasteApp类,使其继承自object。我们在这个类内进行封装截图功能:此时创建完成之后会生成一个sinpasteapp.h和sinpasteapp.cpp文件:接下来我们需要创建一个系统托盘,我们点击这个托盘的时候上面会弹出一个菜单,上面显示一个截图和退出菜单选项。在main.cpp内定义我们创建的sinpasteApp类实例,这样就会自动调sinpasteapp.h和cpp文件了:main.cpp在sinpasteapp.h文件建一个托盘对象:在。
2024-12-12 01:03:33
758
原创 C++ 模板
模板是另一个编程思想(泛型编程)的一种技术。模板就是建立通用的模具,大大提高复用性。一寸照片模板:模板的使用前提:模板不能直接使用,需要塞入我们自己的内容。模板不是万能的(例如不能用PPT模板去套一寸照片)
2024-11-16 20:09:33
863
原创 套接字网络通信
因为服务器端是优于客户端先创建的,那么客户端如果想向服务器端发送请求就需要知道服务器端的ip地址和端口号,因此服务器端需要一个固定的ip地址和端口号。之后服务器端通过accept()函数接受客户端连接,同时接受到了客户端的ip和端口号,然后就可以与客户端进行通信了。先前我们服务器端绑定的时候是我们手动绑定一个固定ip和端口号,为什么到客户端这里就只需要随机绑定一个端口号了呢?如果我们想让服务器端与客户端的固定的端口号进行通信,那我们在客户端也需要调用bind()函数绑定指定端口号。
2024-11-13 17:52:08
856
原创 C++ 多态
多态,顾名思义,多种形态。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价普通继承是子类继承父类的全部,是一种复用。虚函数在多态情况下是子类复用父类的接口,重写父类的实现。
2024-11-08 00:20:20
704
原创 Linux使用常见问题指南
增加配置, 在打开的配置文件中,找到root ALL=(ALL) ALL, 在下面添加一行。然后你就可以通过下面面临安装gcc/g++,并且运行编写的.cc程序了。当前的用户没有加入到sudo的配置文件里。#其中xxx是你要加入的用户名称。#切换到root用户。
2024-09-20 00:20:44
214
原创 QT天气预报(定位当地城市显示当地城市天气,显示搜索城市天气)
定义一个变量//鼠标离左上角的距离定义两个方法//处理鼠标点击事件//处理鼠标移动事件方法实现//处理鼠标点击事件//处理鼠标移动事件当鼠标点击时会调用mousePressEvent()函数,获取鼠标点击的位置,当鼠标按住移动的时候会调用 mouseMoveEvent()函数,会用鼠标当前位置减去左上角位置就是移动的位置.从而实现拖动窗体的效果.
2024-09-10 22:04:45
873
5
原创 c++ 继承
总结:继承的本质就是复用,集成的作用就是减少重复代码 例如有羊,猫,狗三个动物.每个动物都有性别,年龄等属性.都有行走,睡觉等方法.我们可以为每个动物写一个类,如下:我们发现其中大部分东西都是重复的,我们可以将其公用的属性和方法封装到一个类里面,然后其他的类都复用这个类即可:继承的三种方式继承有三种继承方式:public,protect,private.通过观察下面代码我们可以总结规律: 方法在 类中是 的,这意味着它只能在 类本身、 的派生类(如 、、)内部,以及这些派生类的友元
2024-08-25 19:37:49
797
原创 C++ 单例模式
单例模式是一种设计模式.什么是设计模式呢?设计模式是一种代码设计经验的总结.单例模式就是其中的一种模式.单例模式用于期望全局中类的实例化只有一个的场景.我们只要把类的构造函数私有化,在类外部就无法实例化类对象了.单例模式又分为饱汉模式和饿汉模式.
2024-08-12 23:12:58
564
原创 QT 简易音乐播放器
首先我们需要点击文件夹按钮的时候弹出一个新界面.因此我们需要QFileDialog类,这个函数就是新增一个界面.然后我们需要调QFileDialog下的getExistingDirectory函数,也就是打开一个已经存在的文件夹.getExistingDirectory函数的第一个参数是父节点,第二个参数是标题,第三个参数是文件夹路径.返回值是QString:我们需要把这个字符串转为一个路径,我们可以将其强转为QDir类型,然后再通过entryList函数将该路径下目录里的mp3文件全部过滤出来.代入如下:
2024-08-10 18:00:06
2866
9
原创 QT 网络聊天室简易版
现在我们把窗体自带的标题栏给去了,用我们自己画的.我们在调用窗口这里调用setWindowFlags()函数,它利用有个隐藏标题栏方法Qt::FramelessWindowHint。我们创建一个根文件夹qtalk,里面放客户端和服务器端.客户端就是我们上面写的,服务器端不用Ui界面,创建一个控制台文件即可。在dlg_setting.cpp文件里重写showEvent虚函数,这样我们就可以在点击设置的时候打印出我们的地址。此时就可以通过点击设置按钮打开设置界面了吗。
2024-08-10 17:59:31
873
原创 QT学生管理系统 开发文档
单例模式是qt开发的一种模式.在发布的时候有两种模式,一种是怎么把资源载入exe文件当中,还有一种就是在发布的时候引入外部资源,这种模式占用内容特别少,就是单例模式.我们通过f6键进行换肤,首先提前新建一个stucss.css文件,在里面我们要换的样式写好,然后在我们按完F6之后将其加载进我们的UI界面。然后我们还有个修改操作,就不单独设计UI界面,直接用dlg_addstu.ui的界面.在dlg.css里只保留登录界面的样式,在main.css里只保留主界面的样式。
2024-08-06 23:33:32
1144
4
原创 protobuf开篇
protobuf在我看来就是把在protobuf里面写一个结构体,定义其属性。然后经过proto编译会生成对应的方法,我们可以调用这些方法对该结构体进行一个序列化和反序列化。
2024-05-30 22:33:55
366
原创 文件系统,磁盘的物理存储结构和逻辑存储结构
在计算机中不是所有的文件都是被打开的,只有我们要用的文件的被打开,大部分文件(当前不需要访问的文件),都在磁盘中保存着。这就好比我有十套衣服,但是我出去玩不可能吧十套衣服全穿在身上。我只会穿一套,剩下九套放在柜子里。但是我不能乱放,因为乱放我下次再想找衣服就可能找不到,或者效率很低下,找半天才能找到。我必须要把我的衣服叠好管理起来,方便我下次找到。同样的,当前没被访问的存放在磁盘中的文件我也需要管理起来,目的是为了快速定位文件,提高查找文件的效率。
2024-05-15 19:07:58
872
原创 代码区,数据区,符号表,动静态库
编译器在编译过程中遇到外部定义的全局变量或函数时,只要能找到相应的变量声明即可,至于该变量是不是真的有定义,编译器是不关心的,找变量定义这个事是由链接器来做的。但是编译器为了使链接器方便查找变量的定义会把一个源文件可以对外提供哪些符号,以及该文件引用了哪些外部符号记录下来,并把这些信息放在了一张表上,这个表就叫做符号表。假设当前模块在开发的时候经常需要引用别的模块的函数,那么把两个模块放在一起编译就会很慢。我们可以把需要引用的模块提前编译链接好放在一起,这个编译好的集成库就叫做静态库。
2024-05-08 19:03:14
305
原创 线程理论篇1
线程是为了提高进程的效率。进程的地址空间中保存了cpu执行的机器指令以及函数运行时的堆栈信息,要想让程序运行起来,就要不拿main函数的第一条机器指令地址写入pc寄存器,从而形成一个指令的执行流。进程的缺点在于只有一个入口函数,就是main()函数。因此进程中的机器指令一次只能被一个cpu执行,有没有办法让多个cpu执行同一个进程中的机器指令呢?当然,pc寄存器既然可以指向main()函数,也可以指向其他函数,从而创建一个新的执行流。至此,一个进程内可以有多个入口函数,也就是一个进程存在多个执行流。
2024-05-08 12:24:26
718
原创 C++ 异常
比如说我给直播间设置权限:严谨违规词语。那么当直播间出现了违规词语就直接结束直播,那么给用户的体验不是很好。捕获异常就是捕获到违规之后弹出预先设置好的语句:“请规范言语,文明直播”。
2024-05-02 18:45:00
362
原创 文件缓冲区
假设甲在云南,甲的朋友乙在北京,甲想给乙送个东西就需要跑到北京去:这时候有菜鸟驿站了,甲就不用跑了,直接把包裹交给菜鸟驿站就可以了。缓冲区就类似于菜鸟驿站,缓冲区可以提高使用者的效率。菜鸟不会因为你一个包裹就专门送一趟,而是一次性送大量包裹,这样可以节约成本。缓冲区也是如此,正是因为有缓冲区,才可以积累一部分在统一发送,可以提高发送的效率。菜鸟会给不同日期的包裹分组,按组发货。缓冲区也是如此,有不同的刷新方式。1.无缓冲(立即刷新)2.行缓冲(行刷新)3.全缓冲(缓冲区满了,再刷新)
2024-04-29 00:22:22
405
原创 C++ Easyx 让圆球跟随鼠标移动
如果出现2023,代表配置成功:进入Eaxy官方网站,点击文档:选择 函数->绘图函数->initgraph:可以看见initgraph()函数有如下三个参数:现在我们想生成一个1280*720大小的窗口:我们需写如下代码:但是此时运行窗口会一闪而逝,我们需要把它写在循环里。但是千万不要这样写:会卡爆的要这样写:这样我们就可以得到一个1280*720的窗口了:在文档->图形绘制相关函数下找到soildcircle()函数。
2023-12-02 23:43:56
1631
1
原创 C++11 可变参数模板,lambada表达式
C++11在6个默认成员函数基础上又加了两个:移动构造函数和移动赋值函数针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下:小结:(1) 生成默认移动构造的条件比较严苛:必须是没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个,才会生成默认移动构造函数。(2)没有移动构造函数,编译器会自动调拷贝构造函数:例如,有一个person类:不写拷贝构造编译器会自动生成拷贝构造,同样不写构造,拷贝构造,移动构造,编译器才会生成默认移动构造: 假设我们把其他类里的移动构造函数屏蔽调,编译器就调不了,没有移动
2023-12-02 21:04:53
785
原创 C++11 左值 右值
ret是to_string()的局部变量,出了作用域就会销毁,我们正常返回是对ret做了个拷贝,返回的是拷贝。如果强行用引用返回,相当于把ret的别名返回,ret出了作用域就销毁了,别名自然也销毁了。前面我们可以看到左值引用既可以引用左值和又可以引用右值,那为什么C++11还要提出右值引。右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引。下面我们来看看左值引用的短板,右值引用是如何补齐这个短板的!左值是一个表示数据的表达式(如变量名或解引用的指针),
2023-12-02 14:19:08
944
原创 C++11 列表初始化
t的值肯定是double,但是假设我们不知道是什么类型,现在想在vector里用t的类型,auto用不了,因为auto不能作为参数类型。在vector的构造函数,c++11有一个构造函数叫:initializer_list。原理: initializer_list不存储数据,只是用两个指针指向数据开头和结尾。但是vector,list初始化列表 参数不固定,根据需要自己决定参数个数。难道vector写了很多个构造函数,每个构造函数都有不同的参数个数吗?typeid()也不行,因为它只能看,不能拿来用。
2023-11-26 20:06:05
323
原创 C++ RBTree 理论
1.每个节点不是红色就是黑色2.根节点是黑色的3.不能有两个连续的红色节点 ,即可以出现 红黑 黑黑 不能出现红红4.每条路径上的黑色机节点数量不一样至于性质5:每个叶子结点都是黑色的,这里的叶子节点并不是真的叶子节点,而是NIL节点,即空节点。如图(a):NIL节点有什么作用?如图(a-2),有多少条路径:正确答案是有7条。路径路径的判断规则是:从根节点到NULL。
2023-11-11 22:57:13
1129
原创 Linux 进程控制
有一个结构体成员叫mm_struct,也就是进程地址空间。为什么要有进程地址空间:进程内存地址管理,保护物理内存,进行权限审查,从无序变有序,让我们从统一的视角看待进程代码和数据。mm_struct里面有这些东西。这些起始和结束划分了很多区域。也就是我们用户区的那3个G的空间:里面有自己的成员其中vm_mm是一个指向自己的指针。start和end指定了一段范围。
2023-11-07 22:44:31
289
原创 C语言 通讯录
因为data是一个数组,数组名就是地址,地址怎么可能初始化为0呢,我们应该对data所指向的people结构体里面存储的全部信息初始化为0。同时,每记录一个人的信息时,data数组也会变,比如我们记录了两个人的信息,data就变成了data[2]我们把sz和data【100】整合起来,就是一个通讯录:data存放信息,sz记录变化。Contact就是我们的通讯录类型了,我们可以用这个类型来往通讯录里写信息了。创建一个通讯录:通讯录可以用来存放100个人的信息,可以实现增删查改的功能。
2023-10-30 22:39:36
76
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人