自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (9)
  • 收藏
  • 关注

原创 leecode刷题算法总结----哈希表(C语言)

附:C语言哈希表uthash的使用方法详解(附下载链接)leecode刷题算法总结----哈希表一、哈希表常用函数结构构建//哈希表结构体的构建//1、key值为int型struct HashEntry_int { int key; /* key */ UT_hash_handle hh; /* makes this structure hashable */};//2、key值为字符串struct HashEntry_

2022-01-30 17:40:32 3226

原创 python学习(day1)【元组】

声明: 学习来源《Python从入门到项目实践》【元组】“”"与列表类似 是由一系列按特定顺序排列的元素组成,但它是不可变序列。因此也可以称为不可变的列表 使用()可以将 整数、实数、字符串、列表、元组等任何类型的内容放到元组中元组的元素不可以单独修改,列表可以任意修改“”"1、元组的创建和删除# 1> 使用复制运算符直接创建元组# tuple_name = (elem_1, elem_2, ... ,elem_n)num = (1, 2, 3, 4, 5)print(num)

2022-01-29 18:17:28 504

原创 python学习 【序列】【列表】(day1)

python基础语法学习

2022-01-29 17:11:57 841

原创 万能C语言makefile模板

Makefile 模板

2022-01-11 16:47:59 674

原创 Qt视频直播软件--项目实战(Day8)

第八天项目日记1、今天总结完成用户加入房间的设计用户加入直播间后,用户列表会显示用户加入,用户退出后用户列表会消失完成送礼功能增加房间消息,之前用户房间没有消息内容,现在新增一个2、设计思路对于加入房间和退出房间加入和退出之后给服务器发消息,服务器回复其他客户端该消息,其他客户端收到该消息之后删除对应用户即可。离开直播间客户端离开房间之后 服务器是知道客户端离开哪个房间的,服务器给加入该房间的客户端以及该主播发送该用户离开的消息即可礼物刷礼物这里采用了播放动图的方式,客户端送出礼

2021-11-23 08:00:00 932 3

原创 分割字符串到动态数组中

字符串格式 “123,345,124,1234,123,4”分割解析 成 123 345 124 1234 123 4动态开辟空间#include<stdio.h>#include<string.h>#include<stdlib.h>char **name = NULL;//获取字符串个数int get_extend_code_num(char * str){ int len = strlen(str); char comma =

2021-11-18 18:00:00 715

原创 Qt视频直播软件--项目实战(Day7)

第七天项目日记1、今日总结完成有关弹幕的相关内容的开发用户发送弹幕之后,开播的人显示弹幕,观看直播的人也显示弹幕自己发的弹幕用绿色的框框起来别人发的弹幕直接显示2、设计思路参考连接.对于弹幕的实现,这里使用了定时器,弹幕的队列用vector显示,然后vector中存入Qlabel类,发送或者接收到弹幕之后就给vector中添加对应的label对于弹幕的移动用QTimer 每20ms移动一次移动到边界之后自动消失弹幕的长度根据字符串来自适应,弹幕移动到边界之后自动消失并且清除缓存弹幕的发

2021-11-17 08:00:00 2587

原创 Qt视频直播软件--项目实战(Day6)

第六天项目日记1、今日总结完成客户端首页的所有功能完成客户端加入直播和创建直播的界面设计增加json打包函数和json解析函数增加服务器的开播消息和关闭直播的消息2、设计思路对于创建直播来说,只需要相应的客户发送开播消息给服务器,然后服务器转发给其他客户端关闭直播也是如此另外,在客户端连接之后,要发送当前开播的房间给客户端对于客户端界面,开播和观看直播的界面不同开播界面如下(并非最终版本)观看直播的画面如下开播只需要之间点击开播即可,开播后发送相应的房间号给其他客户端点击观看

2021-11-16 08:00:00 1806

原创 Qt视频直播软件--项目实战(Day5)

第五天项目日记1、今日总结今天完成客户端第一个界面的编写客户端的注册、登录 发送账号密码的消息使用json格式2、设计思路主要操作数据库,以及一些消息的定义,由于客户端的socket再另一个线程里面,所以接收消息的工作都放在客户端的socket线程,ui的显示由线程发送信号给weidget3、代码说明3.1 服务器主要修改代码dbhelper.h新增登录和注册判断dbhelper.cppQString dbhelper::logic_judge(QString name, QSt

2021-11-12 08:00:00 2003

原创 Qt视频直播软件--项目实战(Day4)

第四天项目日记1、今日总结今天开始写客户端1)先设计登录界面2)然后用线程开启socket3)用线程开的话可以实时获取登录的状态关于TCP我参考了这篇博文2、设计思路写的时候试过在连接的时候用信号来处理连接状态,但是发现在等待连接的过程中,ui的控件不会发生改变,说明ui的控件被阻塞了,所以tcp的连接用线程来写,这样就可以实现在界面中实时显示连接状态。3、代码说明widget.ui界面如图所示这里只用了一个界面,然后设计思路是:在登录之前,只显示上面的界面,登录成功之后,只显示

2021-11-08 08:00:00 610

原创 Qt视频直播软件--项目实战(Day3)

第三天项目日记1、今日总结今天继续写服务器1)客户端要有一个登录的功能,所以服务器要连接数据库(这里用的时sqlite3)2)实现了数据库的单例3)在启动客户端时如果没有该数据库就创建该数据库,创建的数据库在程序运行路径4)如果数据库中没有用户表就创建表2、设计思路因为数据库只有一个并且只有服务器会用,所以就直接写成单例模式,并且写自己的函数接口,供主窗口函数调用。3、代码说明dbhelper.h#ifndef DBHELPER_H#define DBHELPER_H#incl

2021-11-06 08:00:00 2155

原创 Qt视频直播软件--项目实战(Day2)

第二天项目日记1、今天总结今天继续写服务器1)主要实现登录日志的功能2)创建一个写日志的类,学会使用Qt的文件操作3)学会使用QListView的使用4)实现日志实时显示和计入文件5)每天一个日志文件,避免单个日志文件过大2、设计思路为记录日志写一个单独的c++类,并且使用单例,避免参数的传递点击日志按钮弹出一个widget界面,为了避免重复点击出现多个widget也使用单例要实现实时刷新日志,就需要在写日志时给日志界面发信号每天要将日志写入不同的文件中3、代码说明新创建的文件

2021-11-05 08:00:00 569

原创 Qt视频直播软件--项目实战(Day1)

一、项目要求先不写吧,等写完了再来补充二、设计思路后面补上,今天很晚了,就做一个代码记录就好了,都在纸上后面会加进来的三、第一天项目日记1、今天总结:今天编写了半个服务器,主要实现的功能1)能够使用Tcp协议创建一个服务器,端口自己定义,点击按钮开开启服务器2)当有服务器连接上来时,能够显示连接的用户,这里为随机的id号3)当客户端断开时刷新列表,只显示在线的id,显示在线客户端数量4)客户端发送数据后消息内容广播发送所有客户端测试:随便用什么网络工具都可以,在这里只需要充当客户端就

2021-11-04 08:00:00 1375

原创 Qt学习之线程的使用(三)--循环调用两个线程(信号量)备忘

例子创建两个线程,让两个线程先后运行,一秒只能有一个线程在运行,一个线程在运行时另一个线程处于阻塞状态,两个线程交替运行。思路利用信号量来做,两个线程两个信号量,开始时两个信号量都是0,当信号量为0时,继续获取也就是-1操作时,就会阻塞,所以假设有AB两个线程,每秒都让信号量-1,刚开始先让A 的信号量+1,那么第一秒只有A会运行,运行之后给B的信号量+1,第二秒A为0会阻塞,B为1会执行,一秒后A的信号量+1…依次循环,实现对AB线程的循环调用。代码用到的信号量 QSemaphore这里对信

2021-11-02 22:06:07 3291

原创 Qt学习之线程的使用(一)

1、利用两种方法写一个使用线程的demo要实现一个例子,点击按钮,每秒中给textExit中写入一个helloworld效果如下图但是槽函数属于事件,事件中死循环会让主函数的事件受阻,主函数受阻就会导致程序崩溃,所以需要用线程去执行QT当中的线程管理类叫QThread 打开线程之后,线程的等级于main一样,所以也需要一个线程入口函数,也就是QThread的run(),所以去重写run()函数就好了,== 不同线程之间的通讯只能用信号和槽==方法一创建一个线程对象,在线程对象中的run中实现

2021-11-01 08:00:00 644

原创 Qt学习之线程的使用(二)--弹幕模拟器

编写一个弹幕模拟器说明界面有一个lineEdit 用来输入弹幕,还有一个按键用来发送弹幕,还可以输入完之后直接按enter发送弹幕,弹幕发送之后会从左边往右边飘,飘到外面之后自动消失设计思路创建一个容器用来存储弹幕输入弹幕的起始x值固定y值取一定范围的随机数线程发送信号收到信号之后容器中的label向右移动移动之后出了界面之后删除label对象关闭的时候回收内存以及线程的回收代码mythread.h#ifndef MYTHREAD_H#define MYTHREAD_H#i

2021-11-01 08:00:00 618

原创 Qt学习之mysql使用(备忘)

1、mysql安装以及使用安装教程mysql使用说明(菜鸟教程)2、qt使用mysql我觉得下面这篇文章很有参考价值qt使用mysql.对qt使用mysql的安装过程做一个简单的总结吧,以免以后踩坑在安装数据库时首先要看一下qt的编译版本是32位还是64位,Qt5.6的话只有32位的,所以这时候就要安装32位的数据库了,否则qt是无法操作64位的数据库的。装完之后要把数据库的 libmysql.ddl 放到qt的编译的使用的mingw的目录的bin下面看的时候如下我是Qt5.6.2 Mi

2021-10-31 08:00:00 2825

原创 Qt学习之事件(三)备忘

1、绘图事件 QPaintEvent重构虚函数 virtual void paintEvent(QPaintEvent* ev)一个简单的例子:画个斜线,两个正方形widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QPaintEvent>#include <Qpainter>namespace Ui {class Widget;}class Widge

2021-10-29 21:47:21 113

原创 Qt学习之事件(二)备忘

事件过滤器的使用事件是发生在widget中,也就是父类窗口中并不能发生在label中,如果想要让事件发生在label中,就必须通过一个叫做事件过滤器的东西,将父窗口中的事件派发给label窗口用到的一个Qt功能叫做提升为该功能作用:让我们能够深度自定义某个官方控件提升为步骤1、先构建一个正常的qt widget项目2、自定义一个label让他继承自QLabel3、将label控件提升为mylabel类型4、重写事件过滤器即可例子:利用事件过滤器,使得键盘事件可以派发给label中,并

2021-10-29 01:06:21 184

原创 QT学习之事件(一)备忘

前言:所有的事件都可以改写,事件属于protected标签下的virtual成员函数所以如果要改写事件,只需要再类当中的protected标签下重写事件函数即可1、关闭事件 QCloseEvent例子:重写closeEvent事件函数函数原型:[virtual protected] void QWidget::closeEvent(QCloseEvent *event)Qt内部示例如下编写一个例子效果如下,界面如下,功能描述,点击【关闭关闭事件】之后该窗口无法关闭,点击【打开关闭事件】之后

2021-10-28 00:44:44 336

原创 cJSON 组包时避免内存泄露 C LINUX

记录一次cJSON组包时避免内存泄露1、先展示正确的例子#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <unistd.h>#include "cJSON.h"void pack_data(){ cJSON* root = cJSON_CreateObject(); //创建一个root object

2021-09-27 09:52:22 402

原创 Linux C语言 在mmap映射里面玩链表

一、mmap的作用mmap函数其实就是把物理地址映射到虚拟地址,可以由用户空间的进程进行操作,起到一个虚实地址转换的作用;举个简单的例子,有一些记录很容易变,并且在程序退出后又想保留下来,那么这时候就可以用到mmap了,重启之后直接加载mmap中的数据就可以了。二、mmap函数的使用大家可以直接在ubantu下面 man mmap进行查看如下为部分内容NAMEmmap, munmap - map or unmap files or devices into memorySYNOPSIS

2021-09-16 14:50:51 243

原创 检查程序是否有内存泄漏

查看指令(需要下载valgrind)valgrind --tool=memcheck --leak-check=full ./a.outdefinitely lost: 236 bytes in 4 blocksindirectly lost: 11,482 bytes in 208 blockspossibly lost: 26,656 bytes in 28 blocksstill reachable: 1,497,161 bytes in 321 blockssuppressed: 0 b

2021-03-30 14:39:16 574

原创 大端小端一锅端

大小端说明大端模式就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端小端模式就是高位字节排放在内存的高地址端,低位字节排放在内存的低地址端举例 如要存储 0x11223344 到 modbus寄存器的地址4x4000 4x4001 中其中0x11223344中有四个字节 分别是 0X11 0X22 0X33 0X44 其中0X11为最高位字节,0X44为最低位字节寄存器地址4x4000为低地址端 4x4001为高地址端寄存器地址4000(高字节位)4000(低字节位)

2021-01-22 14:25:33 116

原创 C语言笔记记录---数据和C

转义序列打印原理科学计数

2020-12-21 10:54:04 79

原创 用nanomsg中的PUBSUB(发布、订阅)模式实现线程、进程间的消息互相传递

首先了解一下nanomsg的PUBSUB模式的原理这个只能单方向从server发消息给client。但是如果想要实现 进程与进程之间、进程与线程之间、线程与线程之间消息的互相传递,也是可以的,我个人进行如下的设计。就像上面这样,每个 线程/进程 都新建两个线程,一个用来订阅接收,另一个用来发布。当然如果只需要接收不需要发布也可以不创建多个线程。下面来写一个demo,demo功能如下进程一 开三个线程 A B CA线程开两个子线程,发布线程绑定一个本地地址和一个进程地址,并且会发布 05 10

2020-11-27 17:31:35 2519 1

原创 交叉编译nanomsg库 错误处理

交叉编译nanomsg官网的编译步骤% mkdir build% cd build% cmake ..% cmake --build .% ctest .% sudo cmake --build . --target install% sudo ldconfig (if on Linux)交叉编译​ nanomsg用工具cmake编译。我们要实现交叉编译只要修改一下nanomsg-master目录下的CMakeLists.txt​ 修改如下:​ 打开CMakeLists.txt文

2020-11-16 10:26:50 625

原创 nanomsg接口函数以及功能列举大全

nanomsg接口函数以及用法nanomsg函数官网包含以下函数int nn_socket (int domain, int protocol);int nn_close (int s);int nn_setsockopt (int s, int level, int option, const void *optval, size_t optvallen);int nn_getsockopt (int s, int level, int option, void *optval, size_t

2020-11-11 11:50:20 4288

原创 SQLite3深入学习笔记记录(一)

一、本文包含函数列表 函数名称 函数原型 sqlite3_open int sqlite3_open(const char *filename, sqlite3 **ppDb*); sqlite3_exec int sqlite3_exec(sqlite3*, const char *sql, int *callback, void* data, char **errmsg); sqlite3_prepare int sqlite3_prepare(sqlite3 *db, con

2020-09-08 14:36:48 245

原创 排序算法(一)之归并排序,学不会你打我!(C语言)

排序算法一 之 归并排序ps:需要函数的直接下边粘贴复制,注释也比较全。这一篇值讲归并排序为什么要用归并排序?因为归并排序可以说是最稳定的一种排序,它的时间复杂度为O(cnlog2n)。其中c为常数,n为排序个数。想必会搜归并排序的朋友也一定做过大致的了解。那我这里就不做过多的赘述。直接开始原理!如上图所示,就是归并排序的一个例子,我们以一个数组array【8】 = {3,6,7,7,8,2,1,5}为例子;然后通过函数进行讲解。首先看一个函数void merge(int* array,

2020-07-07 19:10:33 518

原创 Linux 网络编程之TCP服务器端实例(一)

TCP编程模型实例(一)TCP客户端服务器编程模型客户端调用序列调用 socke t函数创建套接字调用 connect 链接服务器端调用 I/0 函数(read/write)与服务器端通讯调用 close 关闭套接字服务器端调用序列调用 socket 函数创建套接字调用 bind 绑定本地地址和端口调用 listen 启动监听调用 accept 从已连接队列中提取客户端连接调用 I/O 函数(read/write)与客户端通讯调用 close 关闭套接字...

2020-05-29 16:00:27 384

原创 Linux 网络编程常用函数功能总结及结构体作用

1、bind函数原型

2020-05-29 10:46:27 176

原创 解决树莓派无法安装QT5 的问题

树莓派安装QT5步骤这篇博客里面有步骤,但是我在安装时候遇到了一下问题,我一开始没有查到怎么解决就重装了系统,最后发现应该是源的问题,就写了这个来记录一下,希望能帮助到和我一样玩树莓派的小伙伴。1.命令行输入:sudo apt-get update2.命令行输入:sudo apt-get upgrade3.命令行输入:sudo rpi-update4.命令行输入:sudo apt-get...

2020-04-18 19:23:34 9370 12

原创 Linux系统下进程间利用消息队列实现广播和点对点通讯(C语言)

进程间消息队列实现广播和点对点通讯实现功能:利用程序生成4个可执行程序,A、B、C、D 实现他们之间互发消息和群发消息。用到的内容:线程,消息队列程序实现流程图用到的主要函数及其说明1.ftok函数key_t ftok(const char *pathname, int proj_id);需要的头文件#include <sys/types.h>#include &l...

2020-04-15 11:35:21 1807

原创 超实用 超全 Vim 必会快捷操作

Vim 操作在nomal模式(冒号都是必须输入的)左h下j上k右l练习: http://vim-adventures.comDelete删除一个光标i 插入r 替换一个字符 在某个字符先按r再按要替换的字符退回 u 反退回 ctrl+r删除整行 dd删除多行 数字+dd 如2dd 删除两行选中行模式 v 选中后 y复制 p粘贴选中列模式 ctrl+v 常用于删除列的空格选中空...

2020-04-07 15:14:33 126

QT 使用QMovie QT客户端服务器 QT直播项目第八天内容

qt项目第八天代码

2021-11-22

Day7.zip QT 直播 弹幕 客户端 服务器

qt直播间项目,第七天代码

2021-11-16

Day6.zip Qt tcp客户端 服务器

一个项目的日记备份

2021-11-15

第五天 服务器 客户端 TCP Qt .zip

写一个项目 里面有客户端服务器的源码 实现了登录注册功能

2021-11-12

第四天 Qt TCP 客户端和服务器.zip

写一个项目 里面有客户端服务器的源码

2021-11-07

1103_01_server_3.zip

qt tcp 服务器

2021-11-06

1103_01_server_1.5.zip

(项目day2)代码 Qt版本5.6

2021-11-05

1103_01_server.rar

用Qt写一个tcp服务器实现 也是项目实战的第一天的代码

2021-11-04

merge_sort.c

C语言 排序算法中的《归并排序》里面是有关归并排序的一个小的c文件。有需要的可以直接下载,免积分下载。

2020-07-07

空空如也

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

TA关注的人

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