基于C/C++的easyx图形库教程

文章目录:

一:前言 

二:窗口(宽高 背景颜色 窗口标题 弹出对话框)

三:图形绘制(点 线 矩形 圆 椭圆)

四:文字(颜色 大小 背景 位置 打印 文字居中)

五:事件消息

1.键盘事件消息(按键交互 按键异步交互 双缓冲贴图)

demo1 

demo2

2.鼠标事件消息

2.1  利用MOUSEMSG的方法

2.2  利用ExMessage的方法 

3.定时器事件消息

六:图片/贴图(原样贴图 透明贴图 精灵图 双缓冲贴图)

七:背景音乐

八:项目

贪吃蛇 


一:前言 

官网:EasyX Graphics Library for C++

参考

官方:EasyX 文档 - 基本说明

51:easyx保姆级教程

第三方:EasyX基础入门、番外篇:入门EasyX图形库

下载

安装easyx环境:EasyX Graphics Library for C++——>右上侧点击下载安装在

安装程序会自动检测您已经安装的 VC 版本,并根据您的选择将对应的 .h 和 .lib 文件安装至 VC 的 include 和 lib 文件夹内

编译器 VS或者VC:编译环境:Visual C++ 6.0,Visual Studio 2008 至 Visual Studio 2022 (x86 & x64)

使用

启动 Visual C++,创建一个空的控制台项目(Win32 Console Application),然后添加一个新的代码文件(.cpp),并引用 graphics.h 头文件

// 引用图形库头文件
#include<easyx.h>        //这个是只包含最新的API(函数接口)
#include<graphics.h>     //这个头文件包含了上面的,还包含了已经不推荐使用的函数	#include <conio.h>int main()	//画圆的例子
{initgraph(640, 480);	// 创建绘图窗口,大小为 640x480 像素circle(200, 200, 100);	// 画圆,圆心(200, 200),半径 100_getch();				// 按任意键继续closegraph();			// 关闭绘图窗口return 0;
}

二:窗口(宽高 背景颜色 窗口标题 弹出对话框)

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件void change()
{//设置图形窗口//窗口定义HWND hand	 函数GetHWnd()获取窗口信息HWND hnd = GetHWnd();//设置窗口标题内容SetWindowTex(类型变量名,修改内容)SetWindowText(hnd,"很高兴认识你");//设置提示窗口:MessageBox(类型变量名,提示内容)int is_ok = MessageBox(hnd,"我是消息框","要不要关闭我",MB_OKCANCEL);if(is_ok == IDOK){printf("你点击了OK\n");}else if(is_ok == IDCANCEL){printf("你点击了cancel\n");}
}int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520);//宽520,高520//initgraph(520, 520,SHOWCONSOLE);//宽520,高520/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();change();//调用/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

三:图形绘制(点 线 矩形 圆 椭圆)

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520);//宽520,高520/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//设置线条的函数setlinecolor(颜色):线条颜色默认为白色setlinecolor(BLACK);//画圆形//画一个圆(圆心的横坐标,圆心的纵坐标,圆的半径)circle(50, 50, 50);//填充背景颜色setfillcolor(颜色):默认为白色setfillcolor(BLUE);//有边框实心圆fillcircle(圆心的横坐标,圆心的纵坐标,圆的半径)fillcircle(50, 150, 50);//有边框//无边框的实心圆solidcircle(圆心的横坐标,圆心的纵坐标,圆的半径)solidcircle(50, 250, 50);//无边框//点:putpixel(x,y,color);putpixel(100,100,BLUE);//线//line(x1,y1,x2,y2); //起始坐标,终止坐标//可以使用getwidth() gethight()获取窗口的宽度和高度line(10,10,80,80);//设置线条颜色setlinecolor()setlinecolor(BLUE);//样式setlinestyle(样式,宽度);/*样式#define	PS SOLID			0#define	PS DASH				1#define	PS DOT				2#define	PS DASHDOT			3#define	PS DASHDOTDOT		4#define	PS NULL				5#define	PS INSIDEFRAME		6#define	PS USERSTYLE		7	#define	PS ALTERNATE		8#define PS STYLE MASK		0x0000000F*/setlinestyle(8,8);//正矩形//左上角坐标,右下角坐标---->无填充矩形rectangle(x1,y1,x2,y2);   rectangle(150,150,250,250); //颜色填充setfillcolor(); setfillcolor(BROWN); //填充矩形//fillrectangle();  //无边框填充矩形solidrectangle(); //solidrectangle();    //圆角矩形//roundrect(x1,y1,x2,y2,宽度,高度);roundrect(200,200,300,300,10,10);//fillroundrect()和solidroundrect()//椭圆ellipse(x1,y1,x2,y2);矩形左上角和右下角坐标,椭圆就是该矩形的内切ellipse(150,150,250,450);//fillellipse()和solidellipse()/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

四:文字(颜色 大小 背景 位置 打印 文字居中)

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520);//宽520,高520/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//设置文字颜色settextcolor(颜色):文字的颜色默认为白色settextcolor(RED);//文字格式为红色//设置文字大小settextstyle(高度,宽度 如果为0则自动匹配,字符的形式比如楷体宋体)settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式//设置当前字体的颜色setcolor(颜色)setcolor(GREEN);//设置字体的背景setbkmode(颜色):背景默认为白色会掩盖其他物体setbkmode(TRANSPARENT);		//透明//显示位置:fillrectangle(矩形左部 x 坐标,矩形顶部 y 坐标,矩形右部 x 坐标,矩形底部 y 坐标);//打印文字outtextxy(文字的横坐标,文字的纵坐标,文字的内容)outtextxy(100, 100, "文字在图形的居中显示1");//文字在图形的居中显示//initgraph(520, 520)	fillrectangle(100, 100, 500, 500)//求字体的宽度与高度char arr[] = "文字在图形的居中显示1";int width = textwidth(arr);int height = textheight(arr);//求所加坐标的值//所加x坐标的值int x = (520 - width) / 2;//所加y坐标的值int y = (520 - height) / 2;outtextxy(x, y, "文字在图形的居中显示2");/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

五:事件消息

1.键盘事件消息(按键交互 按键异步交互 双缓冲贴图)

demo1 

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
#include<conio.h>					//键盘int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520,SHOWCONSOLE);//宽520,高520,这里的第三个参数为显示控制台窗口/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);int x = 200, y = 300;//这个函数用于开始批量绘图:执行后,任何绘图操作都将暂时不输出void BeginBatchDraw();while (1){/*清除系统之前默认的黑色背景*/cleardevice();//填充红色背景setfillcolor(RED);//无边框实心圆solidcircle(x, y, 50);//停止闪烁:这个函数用于执行未完成的绘制任务。比EndBatchDraw更稳定FlushBatchDraw();//第一种 按键交互:键盘响应ascll码值//获取键盘信息_kbhit()			头文件:conio.h/*if (_kbhit()){//输出键盘信息:_getch()		头文件:conio.hchar key = _getch();printf("%d %c\n", key, key);//可以获取键的ASCII值switch (key){case 72://上键的ASCII值y -= 5;break;case 80://下键的ASCII值y += 5;break;case 75://左键的ASCII值x -= 5;break;case 77://右键的ASCII值x += 5;break;}}*///第二种 键盘异步交互:方法调用(更加丝滑)if (GetAsyncKeyState(VK_UP)){y--;}if (GetAsyncKeyState(VK_DOWN)){y++;}if (GetAsyncKeyState(VK_LEFT)){x--;}if (GetAsyncKeyState(VK_RIGHT)){x++;}}/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

demo2

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
#include<time.h> 
#include<conio.h>					//阻塞函数getch()不需要回车确认输入//球定义
struct Ball
{int x;int y;int r;//增量int dx;int dy;
};
struct Ball ball={400,400,15,5,-4};
struct Ball myball={500,500,15,5,5};//画球
void DrawBall(struct Ball ball){setfillcolor(RED);solidcircle(ball.x,ball.y,ball.r);
}
//定时器:去控制自动移动东西			#include<time.h> 
//			时间间隔	id
int Timer(int duration,int id){//开始时间static int startTime[10];//结束时间int endTime=clock();			//clock()统计程序运行到当前代码的时间if (endTime-startTime[id]>duration){startTime[id]=endTime;return 1;}return 0;
}
//移动球(自己动)
void MoveBall(){//相撞		左壁			右壁if(ball.x-ball.r<=0||ball.x+ball.r>=800){ball.dx=-ball.dx;	//反射:增量发生变化}//相撞		上壁			下壁if(ball.y-ball.r<=0||ball.y+ball.r>=800){ball.dy=-ball.dy;}ball.x +=ball.dx;ball.y -=ball.dy;
}
//按键交互:移动球(按键控制)会发生阻塞
void KeyDown(){//获取用户按键int userKey=_getch();switch (userKey){case 'w':case 'W':case 72:myball.y -=5;break;case 's':case 'S':case 80:myball.y +=5;break;case 'a':case 'A':case 75:myball.x -=5;break;case 'd':case 'D':case 77:myball.x +=5;break;}
}
//键盘异步交互:不会发生阻塞
void KeyDown2(){if (GetAsyncKeyState(VK_UP)){myball.y -=5;}if (GetAsyncKeyState(VK_DOWN)){myball.y +=5;}if (GetAsyncKeyState(VK_LEFT)){myball.x -=5;}if (GetAsyncKeyState(VK_RIGHT)){myball.x +=5;}
}int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(800, 800);/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//开始双缓冲贴图:解决一闪一闪的问题BeginBatchDraw();//控制移动while (1){//刷新cleardevice();//先画球DrawBall(ball);DrawBall(myball);if(Timer(20,0))//球自己移动球MoveBall();//鼠标控制球移动//if (_kbhit())	//判断阻塞:判断存在按键再去处理//{//	KeyDown();//}//if(Timer(20,1))//键盘异步交互KeyDown2();//Sleep(20);		//休眠一下	也是阻塞函数//显示每一帧FlushBatchDraw();}//结束双缓冲贴图EndBatchDraw();/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

2.鼠标事件消息

2.1  利用MOUSEMSG的方法

#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>int main()
{initgraph(520, 520,SHOWCONSOLE);setbkcolor(BLACK);cleardevice();while (1){//判断有无鼠标信息if (MouseHit()){//读取鼠标信息//鼠标信息的类型:MOUSEMSG//定义变量(举例):MOUSEMSG msg;//读取鼠标信息的函数:GetMouseMsg()MOUSEMSG msg = GetMouseMsg();//消息处理switch (msg.uMsg)								//获取当前鼠标消息{case WM_LBUTTONDOWN:							//鼠标左键outtextxy(200, 200, "鼠标左键");			printf("左键坐标(%d,%d)", msg.x, msg.y);			//msg.x获取鼠标的横坐标	msg.y获取鼠标的纵坐标break;case WM_RBUTTONDOWN:							//鼠标右键outtextxy(100, 100, "鼠标右键");		printf("右键坐标(%d,%d)", msg.x, msg.y);break;case WM_MBUTTONDOWN:							//中键按下printf("中键按下\n");break; case WM_MOUSEWHEEL:								//滚轮滑动printf("%d滚轮滑动\n",msg.wheel);   //获取滚轮滑动方向,正朝屏幕,负朝自己break;case WM_MOUSEMOVE:								//鼠标移动printf("鼠标移动\n");break;}}}getchar();closegraph();return 0;
}/*MOUSEMSG结构体struct MOUSEMSG	{		UINT uMsg;				获取当前鼠标消息bool mkCtrl :l;			Ctrl 键是否按下bool mkShift :l;		Shift 键是否按下bool mkLButton :l;		鼠标左键是否按下bool mkMButton :l;		鼠标中键是否按下bool mkRButton :l;		鼠标右键是否按下short x;				当前鼠标 x 坐标short y;				当前鼠标 坐标short wheel;			鼠标滚轮滚动值 (120 的倍数)}*/

2.2  利用ExMessage的方法 

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件int main()
{initgraph(800, 600,SHOWCONSOLE);//setbkcolor(WHITE);cleardevice();//定义ExMessage类型的变量去存储鼠标消息ExMessage msg;		 	  while (true){//获取鼠标消息peekmessage(&变量)while (peekmessage(&msg)){//讨论鼠标消息switch (msg.message)	//区分鼠标消息的类型:msg.message{//鼠标的当前坐标:msg.x  msg.ycase WM_LBUTTONDOWN:circle(msg.x,msg.y,10);break;case WM_RBUTTONDOWN:rectangle(msg.x-5,msg.y-5,msg.x+5,msg.y+5);break;}}}getchar();closegraph();return 0;
}

3.定时器事件消息

#include<time.h> //定时器:去控制自动移动东西			#include<time.h> 
//			时间间隔	id
int Timer(int duration,int id){//开始时间static int startTime[10];//结束时间int endTime=clock();			//clock()统计程序运行到当前代码的时间if (endTime-startTime[id]>duration){startTime[id]=endTime;return 1;}return 0;
}int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(800, 800);/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//调用if(Timer(20,0))//球自己移动球MoveBall();//这是一个你自己写的方法/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

六:图片/贴图(原样贴图 透明贴图 精灵图 双缓冲贴图)

图片需要和程序放在一个路径之下 

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件int main()
{initgraph(800, 600,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//原样贴图//定义图片变量去表示图片IMAGE mage;//读取加载图片:loadimage(图片地址,"图片路径 相对 绝对",int nwidth缩放的宽度,int nheight缩放的高度)loadimage(&mage, "./images/bk.png",800,600);//显示图片:putimage(图片的横坐标,图片的纵坐标,图片地址)putimage(0, 0, &mage);//透明贴图(去掉一张图片原本的背景):通过图像的颜色二进制运算达到去背景效果//要处理扣图片:黑白背景IMAGE test[2];//掩码图加载loadimage(test+0,"./images/1.png",800,600);//背景图加载loadimage(test+0,"./images/2.png",800,600);//贴图putimage(100,100,test+0,SRCAND);		//贴掩码图putimage(100,100,test+1,SRCPAINT);		//贴背景图//双缓冲贴图:解决一闪一闪的问题//在BeginBatchDraw();    和     EndBatchDraw();写代码//键盘事件消息demo2中有举例getchar();closegraph();return 0;
}

精灵图(drawImg报错)后面修改

#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>				//包含多媒体接口,一定放在graphics.h下面
#pragma comment(lib,"winmm.lib")	//预处理指令接口连接库
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
#include<time.h> int main()
{initgraph(500, 500,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//精灵动画:一排有很多照片实现动画IMAGE img_sheet;loadimage(&img_sheet,"./images/wugui.jpg");const int frameDelay=1000/60;int frameStart=0;int frameTime=0;int imgsize=32;		//每帧的尺寸int frames=7;		//精灵的个数int speed=200;		//速度毫秒int index=0;		//下标:贴那一张图片while (true){frameStart=clock();BeginBatchDraw();cleardevice();drawImg(250,250,imgsize,imgsize,&img_sheet,index * imgsize,0);EndBatchDraw();index=(clock()/speed)%frames;frameTime = clock() - frameStart;if (frameDelay-frameTime>0) //16 -10 = 6 >0{Sleep(frameDelay-frameTime);}getchar();closegraph();return 0;
}

七:背景音乐

#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>				//包含多媒体接口,一定放在graphics.h下面
#pragma comment(lib,"winmm.lib")	//预处理指令接口连接库void BGM()
{//读取音乐:文件为.mp3为后缀才可播放,要把音乐拷贝到项目所在文件夹里//打开音乐	//0,0,0为默认输出控制台mciSendString("open ./images/ha.wav alias bgm", 0, 0, 0);	//mciSendString("open ./images/ha.wav", 0, 0, 0);		//播放音乐	重复播放repeatmciSendString("play bgm repeat", 0, 0, 0);//mciSendString("play ./images/ha.wav", 0, 0, 0);//设置音量大小	0~1000mciSendString("setaudio bgm volume to 10",NULL,0,NULL);	//专门用来播放音效					表示路径是文件名  异步PlaySound("./images/ha.wav",NULL,SND_FILENAME|SND_ASYNC);if (0){mciSendString("test./images/ha.wav",0, 0, 0);}
} int main()
{initgraph(500, 500,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();BGM();//调用getchar();closegraph();return 0;
}

八:项目

贪吃蛇 

基于C/C++的easyx实现贪吃蛇游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 reactive丢失响应式

问题 使用 reactive 构造响应式对象时&#xff0c;当对其进行重新赋值后&#xff0c;会导致原有变量失去响应式&#xff0c;页面不会发生联动更新 例如&#xff1a; 1、使用 reactive 定义一个响应式的对象变量 let data1 reactive({name: 小李,date: 2024-03-18,address: xx…

解读“CFMS中国闪存市场峰会”存储技术看点-1

昨天CFMS中国闪存市场峰会在深圳举行&#xff0c;小编本来计划前往现场参加&#xff0c;但由于有事冲突未能如期前往&#xff0c;非常遗憾&#xff01; 本次峰会的主题是“存储周期激发潜能”。在闪存市场的供需关系逐渐恢复正常的阶段&#xff0c;闪存市场如何发展变化&#x…

Vue字符串里的中文数字转换为阿拉伯数字

js字符串里的汉字数字转化为数字 <template><view><view><view class"inpbox" ><textarea v-model"voiceMane" input"convert" ></textarea></view></view></view> </template> &…

【视频异常检测】Delving into CLIP latent space for Video Anomaly Recognition 论文阅读

Delving into CLIP latent space for Video Anomaly Recognition 论文阅读 ABSTRACT1. Introduction2. Related Works3. Proposed approach3.1. Selector model3.2. Temporal Model3.3. Predictions Aggregation3.4. Training 4. Experiments4.1. Experiment Setup4.2. Evaluat…

自然语言处理实战项目28-RoBERTa模型在BERT的基础上的改进与架构说明,RoBERTa模型的搭建

大家好,我是微学AI,今天给大家介绍下自然语言处理实战项目28-RoBERTa模型在BERT的基础上的改进与架构说明,RoBERTa模型的搭建。在BERT的基础上,RoBERTa进行了深度优化和改进,使其在多项NLP任务中取得了卓越的成绩。接下来,我们将详细了解RoBERTa的原理、架构以及它在BERT…

ensp不同vlan间的互相通信

关于不同vlan之间的通信&#xff0c;本章做了最简洁的案例&#xff0c;表示说明 1. 网段设置 1.1 划分四个不同 的 vlan vlan网段vlan10192.168.10.254 /24vlan20192.168.20.254 /24vlan30192.168.30.254 /24vlan40192.168.40.254 /24 1.2 SW1的配置 #进入视图 sys #更改交…

QT的学习

代码练习 做一个UI登录页面 源文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("洛克启动&#xff01;");this->…

iOS报错-Command PhaseScriptExecution failed with a nonzero exit code

问题&#xff1a;iOS debug没问题&#xff0c;一打包就报错&#xff1a; Command PhaseScriptExecution failed with a nonzero exit code 解决方法如下&#xff1a; 在项目的Pods目录下&#xff0c;找到Targets Support Files->Pods-xxxx-frameworks.sh 如下&#xff1a…

全域电商数据实现高效稳定大批量采集♀

全域电商&#xff0c;是近几年的新趋势&#xff0c;几乎所有商家都在布局全域&#xff0c;追求全域增长。但商家发现&#xff0c;随着投入成本的上涨&#xff0c;利润却没有增加。 其中最为突出的是——商家为保证全域数据的及时更新&#xff0c;通过堆人头的方式完成每日取数任…

hcip复习总结1

OSI----------- 定义了数据的产生标准 。 7 层 应用 ------- 表示 会话 传输 -----Telnet - 23 ssh---22 http---80 https-443 TCP ---- 传输控制卋议。是一种面向连接的可靠的传输卋议。 UDP---- 用户数据报卋议。是一种非面向连接的丌可靠传输卋议。 保证可靠性&…

Windows系统搭建web网站并结合内网穿透实现公网访问本地站点

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

分享一个ChatGPT 3.5和4.0(国内可用)【2024年3月】

一、ChatGPT的应用&#xff1a; 随着更多人接触并使用GPT&#xff0c;大众普遍赞同了一点&#xff1a;ChatGPT实在是用户体验超棒&#xff01; 现在大家认为最出色的版本无疑是3.5和4.0。通过使用他们&#xff0c;会清楚的发现&#xff1a; GPT-4.0在综合技能上的表现无疑更…

如何在CentOS7搭建DashDot服务器仪表盘并实现远程监控

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务…

通过docker容器安装zabbix6.4.12图文详解(监控服务器docker容器)

目录 一、相关环境及镜像二、zabbix-server服务端部署1.使用docker创建zabbix-server服务端(1). 创建专用于Zabbix组件容器的网络(2). 启动空的MySQL服务器实例(3). 启动Zabbix Java网关实例(4). 启动Zabbix服务器实例并将实例与创建的MySQL服务器实例链接(5). 启动Zabbix Web界…

电磁兼容EMC:一文读懂TVS管选型设计

目录 1 TVS管外观结构 2 TVS管常见品牌 ​编辑3 TVS管命名规则 4 TVS管工作原理 5 TVS基本特点 6 TVS典型应用 7 TVS管电气参数说明 7.1 VRWM 截止电压&#xff0c;IR 漏电流 7.2 VBR 击穿电压 7.3 IPP 峰值脉冲电流&#xff0c;VC 钳位电压 8 TVS选型注意事项 8.1…

【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 在多用户环境下管理磁盘空间是服务器管理中的一项重要任务。Linux提供了强大的磁盘配额功能&#xff0c;可以帮助管理员限制用户或组对文件系统…

【RAG实践】基于 LlamaIndex 和Qwen1.5搭建基于本地知识库的问答机器人

什么是RAG LLM会产生误导性的 “幻觉”&#xff0c;依赖的信息可能过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented G…

Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别

Self-Attention和RNN、LSTM的区别 RNN&#xff08;循环神经网络&#xff09; RNN&#xff0c;当前的输出 o t o_t ot​取决于上一个的输出 o t − 1 o_{t-1} ot−1​作为当前的输入 x t − 1 x_{t-1} xt−1​和当前状态下前一时间的隐变量 h t h_t ht​&#xff0c;隐变量和隐…

数据分析-Pandas多维数据平行坐标可视化

数据分析-Pandas多维数据平行坐标可视化 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…

蓝桥杯刷题(十三)

1.煤球数目 代码 cnt ans 0 start 1 a [] while cnt<100:ansstartstart 1t ansstartcnt1a.append(ans) print(sum(a))2.奖券数目 代码 def f(x)->bool:while x:if x%104:return Falsex//10return True ans 0 for i in range(10000,100000):if f(i):ans1 print(a…