- 博客(99)
- 资源 (3)
- 收藏
- 关注

原创 为什么写博客
为什么写博客:没积分,毕竟免费的太少,所以我的资源通通一积分下载。写文章来分享下经验,共同交流进步。记录成长的脚步。如果有侵权,请联系我,毕竟我也不是从零撸的,还是借鉴了很多网友的代码。...
2021-01-20 14:15:04
97
转载 (1)计算机组成
计算机组成指的是系统结构的逻辑实现,包括机器机内的数据流和控制流的组成及逻辑设计等。主要分为五个部分:控制器,运算器,存储器,输入设备,输出设备。概念 计算机组成的任务是在指令集系统结构确定分配给硬件系统的功能和概念结构之后,研究各组成部分的内部构造和相互联系,以实现机器指令集的各种功能和特性。这种联系包括各功能部件的内部和相互作用。计算机组成要解决的问题是在所希望达到的性能和价格下,怎样最佳,最合理地把各个设备和部.
2021-07-25 23:58:53
270
转载 2-什么是子网掩码
去找公司运维问出口ip,得到答复说:XX.XX.XX.128/25这个网段一百多个ip都是我们的ip内心:???100+的ip?这个25代表什么?应该是误把255打成25了吧!恩,对的,应该是想说XX.XX.XX.128到XX.XX.XX.255这差不多有100多个的!!是问了问这个25是什么,运维大哥回答说这是子网掩码。?????IP 地址分类IP地址是一种在Internet上的给主机编址的方式,也称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主.
2021-07-22 02:34:04
936
原创 (7) 重写QLabel以鼠标点处缩放图片
小试牛刀,话不多说,先看图:原理:初始点(0,0)画图,图片scale缩放,鼠标点x(1+缩放倍数)=图片内坐标,初始画图点反方向移动(鼠标点x缩放倍数的距离),可看到鼠标点处缩放效果。MyLabel.h#ifndef MYLABEL_H#define MYLABEL_H#include <QObject>#include <QLabel>#include <QMouseEvent>#include <QWheelEvent>#inclu
2021-03-29 04:15:14
1312
2
转载 (10)函数模板和类模板
函数模板01 变量交换函数模板假设我们设计一个交换两个整型变量的值的函数,代码如下:// 交换两个整型变量的值的Swap函数void Swap(int &x,int &y){int temp=x;x=y;y=temp;}如果是浮点类型的变量的值交换,则替换 int 类型为 double 即可,代码如下:// 交换两个double变量的值的Swap函数void Swap(double &x,double &y){double temp=x;x=y
2021-03-18 01:52:01
198
转载 (9)指针函数和函数指针
指针的声明:指针其实是一个变量,指针的声明方式与一般的变量声明类似,如下:int *p; // 声明一个 int类型的指针,该指针指向一个int类型的对象char *p; // 声明一个 char类型的指针,该指针指向一个 char类型的对象int *arr[10]; // 声明一个指针数组, 该数组有10个元素,其中每个元素都是一个指向int 类型对象的指针int (*arr)[10]; // 声明一个数组指针,该指针指向一个 in
2021-03-17 22:23:41
140
转载 (8)多级指针
首先看下生活中的快递柜: 这里的格子就是内存单元,编号就是地址,格子里放的东西就对应存储在内存中的内容。 假设我把一本书,放在了 03 号格子,然后把 03 这个编号告诉你,你就可以根据 03 去取到里面的书。那如果我把书放在 05 号格子,然后在 03 号格子只放一个小纸条,上面写着:「书放在 05 号」。 你会怎么做?当然是打开 03 号格子,然后取出了纸条,根据上面内容去打开 05 号格子得到书。这里的 03 号格子就叫指针,因为它里面放的是指向其它格子的小纸条(地址)而不是具体的书。明白
2021-03-16 01:32:23
178
转载 (7)32/64位机器中,各数据类型所占位数的区别
在32位机器和64机器中int类型都占用4个字节。编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数: C类型 .
2021-03-15 16:13:39
1151
转载 (6)虚函数、纯虚函数和抽象类
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:class A { public: virtual void foo() { cout<<"A::foo() is
2021-03-15 15:55:06
381
原创 网络基础(3):通信过程
两台计算机通过TCP/IP协议通讯的过程如下所示: 上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示: 链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间
2021-03-15 00:54:16
224
原创 网络基础(2):分层模型
OSI七层模型 1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。2.数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、13.网络层:在位于不同地理位置的网
2021-03-15 00:54:04
233
原创 网络基础(1):协议的概念
什么是协议 从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。 假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接收方接收到文件名,应答OK给传输方; 第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK; 第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。 由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规则发送、接收数据。A、B之间达成的这个相互遵守的规
2021-03-15 00:53:53
353
原创 网络基础(4):协议格式
数据包封装 传输层及其以下的机制由内核提供,应用层由用户进程提供,应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质
2021-03-15 00:21:06
722
原创 stl::(14)常用拷贝和替换算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <iterator>#include <functional>using namespace std;// copy算法 将容器被指定范围的元素拷贝到另一个容器中// replace算法 将旧元素替换为新元素// replace_if算法 按条件替
2021-03-07 00:21:37
106
原创 stl::(13)常用排序算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>#include <ctime>using namespace std;// merge算法 容器元素合并,并储存到另一个容器 这两个容器必须是有序的void sortMerge(){ vector<int> v
2021-03-07 00:21:26
104
原创 stl(12)常用算法生成算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>#include <numeric> // 支持的头文件using namespace std;// accumulate算法 计算容器元素累计总和void testAccumulate(){ vector<int
2021-03-07 00:21:15
169
原创 stl::(11)常用查找算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>using namespace std;// find算法查找元素 返回查找元素位置void find1(){ vector<int >v; for (int i = 0; i < 10; i++) { v.pus
2021-03-07 00:21:05
79
原创 stl::(10)常用遍历算法
#include <iostream>#include <vector>#include <algorithm>#include <functional>using namespace std;void print(int v){ cout << v << "-";}// 函数对象class print2 {public: void operator()(int v) { cout <<
2021-03-07 00:20:54
106
原创 stl::(9)容器使用总结
vector deque list set multiset map multimap 经典内存结构 单端数组 双端数组 双向链表 二叉树 二叉树 二叉树 二叉树 可随机存取 是 是 否 否 否 对key而言:不是 ...
2021-03-05 00:38:55
193
1
原创 stl::(6)list容器API
list 构造函数list<T> listT; // list采用模板类实现,默认构造list(beg, end); // 构造函数将[beg ,end)区间元素拷贝给本身list(n, elem); // 构造函数将n个elem拷贝给本身list(const list &lst); // 拷贝构造函数list 元素插入和删除操作push_back(elem); // 容器尾部添加一个元素pop_back();
2021-03-04 22:21:49
157
1
原创 stl::(8)set容器API
set根据元素键值自动被排序,迭代器不能修改键值,键值唯一不重复。set 构造函数set<T> st; // set默认构造函数mulitset<T> mst; // mulitset默认构造函数set(const set &st); // set 拷贝构造函数set 赋值操作set& operator=(const set &st); // 重载=swap(st); .
2021-03-04 22:21:25
244
1
原创 stl::(7)map容器API
map 构造函数map<T1,T2>mapT; // 默认构造函数map(const map &mp); // 拷贝构造函数map 赋值操作map& operator=(const map &mp); // 重载=swap(mp); // 交换两个集合容器map 大小操作size(); // 返回容器中元素的数目empty(); // 判断容器是否为空map 插入数据元素操作
2021-03-04 22:21:13
149
1
原创 stl::(5)queue容器API
queue 只有顶端元素,才有机会被外界访问,queue不提供遍历功能,也不提供迭代器。queue 构造函数queue<T> queT; // queue采用模板实现,默认构造queue(const queue& que); // 拷贝构造函数queue 存取、插入、删除操作push(elem); // 往队尾添加元素pop(); // 从队头移除第一个元素back(); // 返回最后一个元素front();.
2021-03-04 22:20:54
88
1
原创 stl::(4)stack容器API
stack 只有顶端元素,才有机会被外界访问,stack不提供遍历功能,也不提供迭代器。stack 构造函数stack<T> stkT; // stack采用模板类实现,默认构造stack(const stack &stk); // 拷贝构造函数stack 赋值操作stack& operator=(const stack &stk); // 重载=stack 数据存取push(elem); .
2021-03-04 22:20:36
126
1
原创 stl::(3)deque容器API
deque 构造函数deque<T> deqT; // 默认构造deque(beg,end); // 构造函数将[beg, end)区间元素拷贝给本身deque(n, elem); // 构造函数将n个elem拷贝给本身deque(const deque &deq); // 拷贝构造函数deque 赋值操作assign(beg, end); // 将(beg ,end) 区间的数据拷贝给本身assign(n, elem); //
2021-03-04 22:20:14
102
1
原创 stl::(2)vector容器API
vector 构造函数vector<T> v; // 采用模板实现类实现,默认构造函数vector(v.begin(), v.end); // 将v[begin(),end())区间的元数拷贝给本身vector(n, elen); // 构造函数将n个elem拷贝给本身vector(const vector &vec); // 拷贝构造函数// 例子,第二个函数可以这样做。。。int arr[]={2,3,4
2021-03-04 22:19:46
83
1
原创 stl::(1)string容器API
string 构造函数string(); // 创建一个空的字符串string(const string& str); // 使用一个string对象初始化另一个string对象string(const char* str); // 使用字符串str初始化string(int n,char c); // 使用n个字符串c初始化string 基本赋值操作string& operator=(
2021-03-04 22:19:25
87
1
转载 (5)数组指针和指针数组
数组指针(也称行指针)数组指针, 从字面意思来看就是"指向数组的指针".定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
2021-03-03 00:49:05
119
原创 (3)友元函数和友元类
一、友元(friend)概念:通过友元,打破了类的封装性,可以访问类内的所有成员分类:友元函数、友元类二、友元函数概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系友元函数可访问类内所有成员,但类不可以访问友元函数内部数据格式友元函数可以在类内声明时,需要加上关键字friend友元函数可以在类外声明,类外定义。需要加上关键字friendclass Cperson{private:int age;public:friend void setPerso
2021-03-02 20:21:21
303
原创 (4)深拷贝和浅拷贝
浅拷贝:统一类型对象之间可以赋值,使用两个对象的成员变量的值相同,两个对象仍是独立的两个对象。一般情况下,浅拷贝没有任何问题,但是当类中有指针,并且指针指向动态分配的内存 空间,析构函数做了动态内存释放的处理,会导致内存问题#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Person{public: Person() {} Person(char *name, i
2021-03-02 20:21:03
80
原创 (2)const和static
static关键字的作用:c/c++共有: 1):修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。 2):修饰局部变量时,表明该变量的值不会因为函数终止而丢失。 3):修饰函数时,表明该函数只在同一文件中调用。c++独有: 4):修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归 所有对象共有。 5):用sta
2021-03-02 20:20:50
522
1
原创 (1)指针和引用的区别
性质上的区别指针本身是一个变量,存储的是地址,而声明的类型名只是解释说明指针所指的位置应该怎么解读。引用作C++的产物,底层实现其实是一个指针,只是实现出来看起来像别名(更像是一种指针常量,并且像重载了一些操作符的感觉,例如解引用(*)),这造成了一些不同。使用上的区别:引用必须要初始化且不能是NULL,而指针可以是NULL。且指针的值可以改变,引用不能改变(更像是const,常量指针的概念)有const指针,但没有const引用指针可以有多级(** p),引用只有一级"sizeof引用
2021-03-02 20:20:35
89
原创 (6)-圆角图片+边框动态闪烁
话不多说先看图:**第一种方法:**利用Qpainter裁剪图片,没什么毛病,推荐。**第二种方法:**利用位图setMask()设置蒙版的方法(仔细看图片有锯齿,未解决,可以不用位图,试试用图片做蒙版)MainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QGraphicsDropShadowEffect>#include <QProperty
2021-02-23 20:13:02
301
转载 Qt-类库模块划分详解
Qt 类库里大量的类根据功能分为各种模块,这些模块又分为以下几大类: Qt 基本模块(Qt Essentials):提供了 Qt 在所有平台上的基本功能。Qt 附加模块(Qt Add-Ons):实现一些特定功能的提供附加价值的模块。增值模块(Value-AddModules):单独发布的提供额外价值的模块或工具。技术预览模块(Technology Preview Modules):一些处于开发阶段,但是...
2021-02-15 15:19:49
456
原创 (4)QPainter 的基本绘图使用
效果图如下:代码如下:void MainWindow::paintEvent(QPaintEvent *){ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 设置反锯齿 // 设置字体:微软雅黑\点大小13\斜体 QFont font; font.setFamily("Microsoft YaHei"); font.setPointSize(13); font.se
2021-02-15 15:06:51
614
原创 (3)颜色渐变风格
1、线性渐变QLinearGradient// 第一种void Widget::paintEvent(QPaintEvent *event){ QPainter painter; painter.begin(this); QLinearGradient ling(QPointF(70, 70), QPoint( 140, 140 ) ); //从起点到终点的渐变 ling.setColorAt(0, Qt::blue); //起点到中心要显示的颜色 lin
2021-02-15 11:49:27
288
原创 (2)颜色渐变及原理
渐变有三种:QLinearGradient, QConicalGradient and QRadialGradient1、QLinearGradientQLinearGradient 是线性渐变,也就是颜色的各个分量(red, green, blue)在两点之间的变化是线性的,需要设置渐变的起始和结束坐标、颜色,超出渐变范围的填充方式,它并不能单独的使用,而是要和 QBrush 一起使用实现填充效果,主要有以下一些函数:// 创建 QLinearGradient,同时设置起始和结束坐标QLinear
2021-02-15 11:37:13
6185
原创 (1)2D绘图详解(QPainter)
一、Qt绘制事件当应用程序收到绘制事件时,就会调用QWidget::paintEvent(),该函数就是绘制窗口的地方。有两种方法要求重绘一个窗口1.update() --把重绘事件添加到事件队列中重复调用update()会被Qt合并为一次不会产生图像的闪烁可带参数指定重绘某个区域2.repaint() --立即产生绘制事件一般情况下不推荐使用此方法只使用在需要立即重绘的特效情况下可带参数指定重绘某个区域基本绘制QPainter类提供绘制操作,其构造函数原型为:QPaint
2021-02-15 11:03:25
1410
转载 Qt-认清信号槽的本质
目录(放个目录方便预览。这个目录是从博客复制过来的,点击会跳转到博客)简介猫和老鼠的故事对象之间的通信机制尝试一:直接调用尝试二:回调函数+映射表观察者模式Qt的信号-槽信号-槽简介信号-槽分两种信号-槽的实现 元对象编译器mocmoc的本质-反射参考文献简介本文是《Qt实用技能》系列文章的第四篇,涛哥在这里讨论Qt信号-槽相关的知识点。信号-槽是Qt框架中最核心的机制,也是每个Qt开发者必须掌握的技能。网络上有很多介绍信号-槽的文章,也可以参考。涛哥的专栏是《Qt进阶之路》,如果连信号-槽的文章都没有,将
2021-02-11 10:14:12
1035
1
原创 17-QTabWidget
/********************************************QTabWidget*********************************************************//*标签栏*/QTabWidget::pane { /* The tab widget frame */ border-top: 2px solid #00C2C7CB; position: absolute; top: 10px; backgro
2021-02-10 14:44:53
100
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人