自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Html3D旋转相册

操作流程: 1.下载文件及资源并解压 2.双击index.html文件到浏览器中运行 文件链接:3D旋转相册 效果效果:

2021-10-30 02:42:24 541

原创 Qt之重写QTreeWidget节点排序

bool MyTreeWidgetItem::operator<(const QTreeWidgetItem& other) const { QRegExp ax("\\d+$"); QRegExp bx("\\d+$"); int column = treeWidget()->sortColumn(); QString str1 = text(column); QString str2 = other.text(column); ax.indexIn(str1, 0)

2021-10-28 17:31:33 1227

原创 Qt之QTableWidget遍历

for(int row=0; row<ui->tableWidget->rowCount(); row++) { for(int col=0; col<ui->tableWidget->columnCount(); col++) { QTableWidgetItem* item = ui->tableWidget_right->item(row,col); } } for(int row=0; row<ui->tableWidget-&

2021-10-28 17:28:12 2430

原创 构造,析构,拷贝,赋值

已知String类定义如下:写出类的成员函数 class String { public: String(const char *str = NULL); // 通用构造函数 String(const String &another); // 拷贝构造函数 ~ String(); // 析构函数 String & operater =(const String &rhs); // 赋值函数 private: char *m_data; };

2021-09-29 01:04:57 212

原创 2021-07-14

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-09-29 00:58:15 153

原创 .线程池.

生产者与消费者模型: 生产者:生产数据的线程 消费者:使用、处理数据的线程 缓冲区:隔离生产者和消费者,这样可以避免互相等待,提高运行效率。 生产者快于消费者:缓冲区爆满 消费者快于生产者:缓冲区一直空 使用条件变量可以解决生产者与消费之间的效率不匹配问题。 生产者快于消费者,通知消费者加速消费,生产者睡眠降低生产速度。 消费者快于生产者,通知生产者加速生产,消费者睡眠降低消费速度。 线程池总体流程 线程池:一次性创建多个子线程,主线程(生产者)负责接收客户端的链接并创建socket对象然后加入到仓库中,

2021-06-26 22:12:22 170

原创 .多路复用.

多路复用: 使用一个进程(且只有主线程)同监控若干个文件描述符的读写,这种读写模式叫多路复用。 多用于TCP的服务端,用于监控客户端的连接和数据的收发 优点:不需要频繁的创建进程、销毁进程,从而节约了内存资源、时间资源,也避免的进程之间的竞争、等待。 缺点:单个客户端的任务不能太耗时,否则其它客户端就会感知到。 适合并发量高,但任务短小的情景,如:Web服务器。 select: fd_set 是文件描述符的集合,使用以下函数操作: void FD_ZERO(fd_set *set); 功能:

2021-06-26 22:04:07 166

原创 TCP/IP编程模型

一、基于TCP协议的C/S模型 int listen(int sockfd, int backlog); 功能:设置等待连接的最大数量 sockfd:被监听的socket描述符 backlog:等待连接的最大数量(排队的数量) int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 功能:等待连接sockfd连接 addr:获取连接的地址 addrlen:设置连接地址结构体的长度 返回值:专门用于通信的描述符 编程模型: Serv

2021-06-26 21:58:58 165

原创 网络编程基础socket

网络通信的基本概念 1、TCP和UDP的区别 TCP(Transmission Control Protocol):传输控制协议,面向连接的服务(类似打电话),安全、可 靠(三次握手、响应+重传、四次挥手,拥塞控制),速度相对较慢,一般应用在对安全性、完整性有严格要求的场景:如文 件传输(ftp)、SMTP、HTTP 三次握手: A要知道,A能到B,B能到A B要也要知道,A能到B,B能到A A 你听得到吗 -> B(此时B知道了A能到B) (A能到B且B能到A)A <- 我能听到,

2021-06-26 21:56:10 179

原创 Qt设计方式

界面布局: 在界面上直接设置控件的位置和大小可能会面临用户修改界面大小的问题,这样可能会导致界面布局混乱。 1、绝对位置布局: 限制窗口的大小,设置窗口的最大、最小高度和宽度,让用户无法修改界面的大小。 minmumSize (w,h) maxmumSize (w,h) 然后计算每个控件的大小和位置。 2、相对位置布局: 1、当窗口的大小发生变化,会自动调用它的resizeEvent函数,该函数是个虚函数。 2、覆盖resizeEvent函数,当窗口大小发生变化时,根据当前窗口的大小,重新设置每个控件的位置

2021-06-26 21:53:30 559

原创 Linux线程同步

线程同步: 当多个线程同时访问一个资源时,如果不进行协调可能会产生数据混乱、操作失效等现在,我们需要使用一些特殊的技术保障线程之间协同工作, 这些技术叫线程同步技术。 互斥量: pthread_mutex_t 也叫互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); 功能:初始化互斥量 int pthread_mutex_lock(pthre

2021-06-26 21:47:18 119

原创 Linux线程管理

线程介绍: 线程就是进程中负责执行的部分,是进程内部的控制序列,它是轻量级的,没有自己独立的内存资源、代码段(txt)、 数据段(静态数据bss、全局数据段data)、堆区(heap)、环境变量、命令行参数、文件描述符、信号处理函数、当前工作目录。 线程拥有独立的栈内存,也就是它自己独立的局部变量。 一个进程中至少有一个线程,我们把它叫作主线程,也可以再创建多个线程。 注意:进程是个资源单位,而线程是个执行单例,线程是进程的一部分,进程中正是有了线程才能动起来。

2021-06-26 21:43:32 353

原创 Linux进程通信

进程间通信: 基本概念: 什么是进程间通信: 是指两个或者多个进程之间交互数据的过程,因为进程之间是相互独立的,为了能够让多个进程协同工作必须交互数据 进程间通信的分类: 简单的进程间通信:信号、文件、环境变量、命令行参数 传统的进程间通信:管道文件 XSI进程间通信: 共享内存、消息队列、信号量 网络进程间通信: Socket套接字 传统进程间通信: 管道是UNIX最古老的进程间通信方式,古老意味着所有系统都支持,早期的管道都是半双工,现在有些系统的管道是全双工(但是也要假定管道是半双工来实现) 管道

2021-06-26 21:31:38 203 1

原创 Linux进程管理

进程基本概念: 1、进程与程序 程序就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行进程。 一个程序被多次加载时生成多个进程 进程就是处于活动状态的计算机程序 2、进程的分类 进程一般分为三种类型:交互进程、批处理进程、守护进程 守护进程一般处于活跃状态,运行在后台,由系统在开机时通过启动脚本来自动创建 3、查看进程 简单方式 ps 显示当前用户有控制终端的进程信息 列表方式 ps auxw 显示所有进程详细信息 a 所有用户的有控制终端的

2021-06-25 01:47:50 156

原创 Linux信号处理

信号处理 基本概念: 1、中断 当程序接收信息后中止当前执行的程序,转而执行其它任务,等其它任务执行完成后再返回,这种执行模式叫中断,分为硬件中断和软件中断。 2、信号 是一种软件中断,由操作系统发出,程序接收到后会执行相应的操作 3、常见的信号 SIGINT(2) Ctrl+c 终止 SIGQUIT(3) Ctrl+\ 终止+core SIGFPE(8) 除0 终止+core SIGKILL(9) 终止

2021-06-25 01:46:53 224

原创 Linux内存管理

一、内存管理 用户层 STL 自动分配/自动释放 调用C++ C++ new/delete 调用C C malloc/free 调用POSIX POSIX brk/sbrk 调用Linux Linux mmap/munmap 调用内核kernal 系统层 kernal kmalloc/vmalloc 调用驱动 driver get_free_page 二、进程映像 程序是存储在磁盘上的可执行文件

2021-06-25 01:45:33 159

原创 Linux文件管理

文件管理: 一切皆文件: UNIX/Linux操作系统把设备和服务都抽象成了文件形式,并提供了一套简单而统一的接口,这部分接口就是文件IO(文件读写) 也就是说UNIX/Linux系统中任何对象都可以当做某种特殊的文件,以文件的形式访问 文件的分类: 普通文件 - 包括纯文本文件、二进制文件、压缩文件 目录文件 d 块设备文件 b 保存大块数据的设备,例如硬盘 字符设备文件 c 类似键盘、鼠标等 管道文件

2021-06-25 01:44:37 219

原创 Linux系统介绍

UNIX系统介绍: 最早版本的UNIX诞生于1970年的贝尔实验室,作者丹尼斯.里奇和肯.汤普逊 是最早的多用户、多任务、支持多种CPU处理器架构,高安全性、高可靠性、高稳定性的系统 既能架构大型关键性的商用服务器,也能支持嵌入式设备 Minix基于微内核架构的类UNIX操作系统,由此Linux之父林纳斯.托瓦兹受到了启发,才开发了第一个版本的Linux Linux系统介绍: Linux,全称GNU/Linux,其内核由林纳斯·托瓦兹于1991年发布,是一个基于POSIX(可移植操作系统接口)的多用户、多

2021-06-25 01:43:31 407

原创 Qt版的贪吃蛇游戏

**开发环境:**Ubuntu12.04 Qt4.8 项目概述: 用键盘上下左右控制蛇的方向,寻找食物,食物随机出现,蛇路过食物蛇的身体会变长,蛇不能碰墙壁及自己的身体,蛇不能相撞,两条蛇谁先达到一定的分数谁获得胜利 **游戏说明:**程序运行后,单击鼠标左键开始游戏 蛇一:方向键上下左右,蛇二WASD上下左右 1.main.cpp #include <QtGui/QApplication> #include <QTextCodec> #include "widget.h" int

2021-06-25 01:23:41 458 2

原创 C++基础知识六

一、虚析构 当使用delete释放一个父类指针时(父类引用),不管指向的是父类对象还是子类对象,都只会调用父类的析构。 当使用多态特性时,如果子类中有需要析构释放的资源,为了避免内存泄漏就需要把父类的析构函数设置为虚函数。 当父类的析构函数为虚函数时,子类的析构会自动覆盖它而不用比较它们的名字,当通过父类或引用来释放子类对象时会自动调用子类的析构函数。 二、文件流 C++把对文件的操作封装到了类中。 ifstream 输入文件流 ofstream 输出文件流 fstream 输入/输出文件流 1、打开文

2021-06-25 01:11:05 250

原创 C++基础知识五

一、类的继承 1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度, 继承就是为了让代码能够重复使用。 2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。 二、继承的基本语法 1、继承表 一个子类可以继承多个父类,每个类的继承方式可以不同。 class 子类:继承方式 父类1,继承方式 父类2,… //继承表 { } 2、继承方式 public 公

2021-06-25 01:09:46 125

原创 C++基础知识四

一、运算符重载 C++中是运算符当作函数来看待,所以C++中的运算符可以重载,这样可以让类对象支持运算符,对类对象进行定制化操作。 例如:string类就支持很多运算符来代替标准库中的函数。 = strcpy += strlen ==|!=|>=|<= strcmp 二、双目录运算符重载 假如:Test a,b; a+b操作可以调用两种函数 Test的成员函数:a是触发者,b是参数 Test operator+(cosnt Test& b) const { return a+b; //

2021-06-24 19:05:48 248

原创 C++基础知识三

一、类的成员变量存储在每个类对象中(每个对象一份),成员函数存储在代码段中(所有的对象共享一份),那么成员函数是如何区分调用它的是哪个对象? 答:与C语言的解决方案一样,把对象的地址传递给成员函数,这样成员函数就知道是哪个对象在调用它,与C语言不同的是该操作是隐藏, 编译器帮我们自动完成的,也就是类的成员函数都隐藏着一个参数,这个参数就是this指针。 this指针: 指向访问成员函数对象的指针,默认是隐藏的,但也可以显示使用。 对象调用成员函数时会自动计算它的内存地址传递给成员函数中的this,而在成员函

2021-06-24 19:04:13 193

原创 C++基础知识二

一、面向对象与面向过程: 面向过程:关注解决问题的步骤,算法。 面向对象:关注的是谁能解决问题,需要什么样的数据(成员变量),具备什么样的功能(成员函数)。 抽象:找出或相像出一个能够解决问题的"对象",通过研究观察对象,找出c"对象"解决问题所必须的数据(属性)、功能(技能)。 封装:把抽象的结果归纳为一个结构,然后实例化出结构变量,然后结构变量中的数据和功能相互作用最终解决问题。 继承:在封装结构时,可以先分析结构需要的数据和功能现有的结构是具备,如果具备,可以继承现有的结构的代码,达到代码复用的目的。

2021-06-24 19:02:44 267 1

原创 C++基础知识一

一、C++介绍 由本贾尼·斯特劳斯特卢普 于1979年4月份至1979年10月份开发一种语言,当时称为“C with Classes”(带类的C), 后来演化为C++。 C与C++区别: 1、C++完全兼容C语言的所有内容。 2、支持面向对象的编程思想(抽象、封装、继承、多态)。 3、支持运算符、函数重载。 4、支持泛型编程、模板。 5、支持异常处理。 6、类型检查严格。 二、第一个C++程序 1、文件扩展名:.cpp .cc .C .cxx 2、编译器:g++ 大多数的Linux系统需要额外安装。 sud

2021-06-24 19:01:24 280 1

原创 Qt中常用控件

一、输入类控件 1、QLineEdit 单选文本框,主要用来从界面获取数据,常用于获取用户名密码。 常用设置: 字体字号设置 垂直、水平对齐设置 只读设置 输入模式: Normal 正常模式 NoEcho 不显示输入的内容 PassWord 以 代码输入的内容 PassWordEchoOnEdit 编辑时显示内容,完成后显示 * 常用信号: textEdited 正常在编辑 textChanged 内容变化了 returnPressed 按下回车键 editingFinished 编辑完成 cursorPo

2021-06-24 18:55:32 2322

原创 Qt自定义信号与槽&定时器

一、自定义信号和槽 1、信号和槽必须定义在类中,并且该类必须继承Qt中的某个类,一般选择继承QObject。 2、必须在类中开头的部分写 Q_OBJECT 没有分号结尾,如果在项目构建前没有写Q_OBJECT,信号与槽连接就会失败, 那怕添加了Q_OBJECT也会出现以下错误。 错误:undefined reference to “vtable for Test” 解决方法:删除项目中所有Q构造器自动生成的文件,使用以下命令重新构建项目。 qmake -project qmake 3、槽函数尾声明在 访问属

2021-06-24 18:54:45 1000

原创 Qt基础知识

一、Qt简介 1、什么是Qt 图形用户界面应用程序开发框架,是对底层的应用程序编程接口进行面向对象的封装,是一套基于C++语言的类库,专注但不局限于用户界面开发,也可以进行系统调用、网络通信、数据库、2D/3D建模、图像处理、音视频处理等。 特点:跨平台,支持Linux、Windows、MacOS、iOS、Android系统。 2、为什么选择Qt 基于C++语言,简单易用。 优良的跨平台特性,在个人计算机、工控、嵌入式的界面占据主导地位。 二、Qt环境与工具 1、工具 Qt助手:Qt的man手册,涉及Qt的

2021-06-24 18:53:44 1397

原创 网络聊天室

业务逻辑: 1、客户端注册名字 2、告诉所有的在线的客户端,XXX进入聊天室。 3、新建一个线程为该客户端服务,随时接收客户端发送来的内容。 4、当收到一个客户端的消息时,向每个客户端都转发一份(群聊)。 5、同时在线人数最多50人。 注意:任何客户端都应该可以随时进入退出。 运行: gcc server.c -oserver gcc client.c -oclient #include <stdio.h> #include <stdlib.h> #include <strin

2021-06-19 15:27:57 176

原创 QT 今晚吃什么

说明: 按下启动定制一会,松开显示今天的晚饭. 代码: 1.widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTimer> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT int index;//记录是第几张图片 int width; int height

2021-05-08 17:07:40 148

原创 排序算法

排序算法: **排序算法的稳定性:** 在待排序的数据中,如果有值相同的数据,在排序的过程中如果不会改变它们的相对顺序,则认为该排序算法为稳定的。 4 2 1 0 9 4 3 8 7 a b 0 1 2 3 4 4 7 8 9 a b【稳定的】 b a【不稳定的】 **冒泡:** 对数据左右进行比较,把最大的交换到最后,特点是该算法对数据的有序性敏感,在排序的过程中发现有序可以立即停止,如果待排

2021-04-14 21:07:28 130

原创 实现cp命令

功能说明: 在同一目录下带覆盖检测的拷贝一份文件 操作说明: g++ cp.cpp -o cp ./cp 源文件名 目标文件名 代码: #include <iostream> #include <fstream> using namespace std; int main(int argc,const char* argv[]) { if(3 != argc) { cout << "User:cp src dest"<< en

2021-04-14 15:31:42 170

原创 浅谈指针与引用

一. 指针 1.什么是指针: 指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,代表了内存的编号,通过这个编号访问到对应的内存。 2.为什么使用指针: a、函数与函数之间是相互独立的,但是有些时候需要共享变量 传参是单向值传递 全局变量容易命名冲突 使用数组还需要传递长度 函数的命名空间是相互独立的,但是地址空间是同一个,所以指针可以解决这个问题 b、由于函数传参是值传递(内存拷贝),对于字节数较多的变量,值传递的效率较低,如果传递的是变量的地址,只需要传递4|8字节。 c、堆内

2021-04-13 09:36:31 1045

原创 C语言小游戏走迷宫

说明: 1.技术:C语言基本知识 2.游戏:方向键控制上下左右 代码: #include <stdio.h> #include <time.h> #include <stdlib.h> #include <getch.h> int main(int argc,const char* argv[]) { //1、定义一个字符类型的二维数组作为迷宫地图 char maze[10][10] = { {'#','#','#','#','#','#','#

2021-03-25 20:35:34 448

原创 随机生成1到10无重复

说明: 功能:随机生成1到10 打印:用符号代表数字1到10. 代码: #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a[12]; int i,j; srand(time(NULL)); a[0]=rand()%12; for(i=1;i<12;i++) { a[i]=rand()%12; for(j=0;j<i;j++) { if(a

2021-03-25 19:12:48 6403

原创 C语言学生成绩管理系统

学生: 姓名 性别 学号 密码 语文 数学 英语 1、第一次登录强制修改密码。 2、查询成绩 排名 不显示姓名和学号。 平均分 最高分 最低分 3、修改密码 4、查看个人信息 5、三次密码错误锁定帐号,由教师解锁 教师: 姓名 性别 工号 密码 1、第一次登录强制修改密码。 2、添加学生(学生的学号自动生成) 单个添加 批量导入 3、删

2021-03-24 11:38:19 651

原创 C语言实现的通讯录

通讯录 姓名、性别、电话,最多存储50个联系人 功能: 1、添加联系人 2、按名字删除联系人 3、按名字修改联系人的信息 4、查找联系人,可以通过电话、名字查找,支持模糊查找 5、显示所有联系人信息 代码 #include <stdio.h> #include <string.h> #include <getch.h> #include <stdlib.h> static char count = 0; //记录有效的联系人数量 static cha

2021-03-24 11:11:48 345

原创 c语言小游戏推箱子

c语言实现的小游戏 说明: @:代表小老鼠 $:代表箱子 O:代表终点 #:代表墙 代码展示: #include <stdio.h> #include <stdlib.h> #include <getch.h> int main(int argc,const char* argv[]) { char map[8][8] = { {0,0,3,3,3,3,0,0}, {0,0,3,5,5,3,0,0},

2021-03-22 11:20:04 332

原创 基于UDP的五子棋网路对战游戏

基于UDP的五子棋网路对战游戏 内容说明: 编程语言:C语言 编程环境:Linux环境编程 实用技术:UDP网络通信技术. 游戏说明: 方向键:移动位置 enter:下棋 实现步骤: Linux环境下: 1打开终端 2.ifconfig 记录本机inet地址 3.cd进入到项目目录 4.编译 (1)gcc sever.c -std=gnu99 -o sever (2)gcc client.c -std=gnu99 -o recv 5.运行 (1)先运行服务端,端口号随机,IP地址步骤1的ine:如./sev

2021-03-19 17:37:53 558 2

原创 c语言学习记录

前言: C语言简介: BCPL->new B->C->UNIX->Minix->Linux->gcc GNU Linux C语言诞生 1970年~1973年,在肯.汤普逊、丹尼斯.里奇主导下编写完成,归属于美国贝尔实验室 C语言专门用于编写操作系统,所以天生适合硬件编程,也以速度快著称,也非常适合实现数据结构和算法 由于出现时间过早,有很多缺陷,由于没想到普通人也能使用C语言编程,因此存在着很多缺陷,但是前辈总结了一些避免陷阱的经验《C语言陷阱与缺陷》 c语言三剑客 C语

2020-12-11 19:55:12 269

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除