C/C++
Away-Far
这个作者很懒,什么都没留下…
展开
-
QTableView表格添加菜单
#include <QTableView>#include <QStandardItemModel>#include <QMenu>#include <QHeaderView>QTableView* m_tableView = new QTableView(this);QStandardItemModel* m_itemModel = new QStandardItemModel(this); //添加表头 m_itemModel->s原创 2020-10-13 14:51:17 · 964 阅读 · 0 评论 -
QOpenglWidget使用示例
opengl相关库文件opengl32.libglu32.libGlaux.libglew32.lib#ifndef CMYOPENGLWIDGET_H#define CMYOPENGLWIDGET_H//#include "TextureManager.h"#include <QOpenGLWidget>class CMyOpenGLWidget : public QOpenGLWidget{ Q_OBJECTpublic: CMyOpenGLWidget(Q原创 2020-09-30 15:41:17 · 2302 阅读 · 0 评论 -
Qt http网络请求
#include <QNetworkAccessManager>#include <QNetworkRequest>#include <QNetworkReply>#include <QSslSocket>#include <QSslConfiguration>#include <QTime>#include <QApplication>#include <QDebug>方式一 QUrl u原创 2020-09-24 14:17:15 · 449 阅读 · 0 评论 -
opencv调节图像色相、饱和度、明度(H\S\V)
一、环境 1、Qt5.5.1; 2、opencv3.0; 3、visual studio 2013. 二、核心代码 1、图像处理部分//调节图像的色相、饱和度、明度bool CvImageAdjust::AddHSV(const QImage& inImg, QImage& outImg, double dH, double dS, double dV)原创 2015-11-10 11:04:33 · 12104 阅读 · 0 评论 -
opencv-压缩图片
使用cvResize函数压缩图片。 //dResizeFactor 缩放比例 //interpolation 插值方式 CV_INTER_NN = 0,CV_INTER_LINEAR = 1,CV_INTER_CUBIC = 2,CV_INTER_AREA = 3,CV_INTER_LANCZOS4 = 4原创 2015-11-11 10:10:55 · 2081 阅读 · 0 评论 -
opencv将图片生成视频
CV_FOURCC获取编码格式:CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codecCV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codecCV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec CV原创 2020-09-24 13:56:43 · 1124 阅读 · 0 评论 -
基于window多线程实现web服务端
实现源代码#ifndef _HTTP_SERVER_H#define _HTTP_SERVER_H#include <WinSock2.h>#include <process.h>#include "stdlib.h"#include "stdio.h"#include "string.h"#pragma comment(lib,"ws2_32.lib")#define BUF_SIZE 2048#define BUF_SMALL 100#def..原创 2020-09-23 14:55:21 · 195 阅读 · 0 评论 -
Qt程序退出QThread: Destroyed while thread is still running问题
Qt程序退出QThread: Destroyed while thread is still running问题解决方法:在主线程中使用new Qthread在堆上创建,即可解决。原创 2020-09-11 14:15:37 · 2630 阅读 · 0 评论 -
链表翻转实现
链表节点数据结构定义struct LinkListNode{ void* data; struct LinkListNode* next;};递归方法//递归实现链表翻转struct LinkNode* reverse(struct LinkNode* lNode){ if(lNode->next == NULL) { return lNode; } struct LinkNode* nodeTemp = reverse(lNode-原创 2020-08-07 11:57:31 · 114 阅读 · 0 评论 -
C++标准库中string简单实现
头文件#ifndef STRING_H#define STRING_H#include <iostream>using namespace std;class String{public: String(const char * str = NULL); String(const String &str); ~String(); String operator+(const String& str) const; Stri原创 2020-08-06 14:03:36 · 248 阅读 · 0 评论 -
C++智能指针简单实现
#ifndef SHARE_PTR_H#define SHARE_PTR_Htemplate<typename T>class CSharePtr{public: CSharePtr( T* ptr) { if(ptr) { m_pPtr = ptr; m_nRef = 1; }else { m_nRef = 0;原创 2020-08-06 13:55:21 · 138 阅读 · 0 评论 -
内存分配
转载自:https://zhuanlan.zhihu.com/p/296323681.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3]从堆上分配,亦称动态内存分配。程序在运行的时候用m转载 2020-08-04 11:45:00 · 320 阅读 · 0 评论 -
基于eXosip的SIP客户端
sip客户端部分代码原创 2015-09-02 10:50:51 · 10640 阅读 · 4 评论 -
常用字符串函数实现
1、memcpy函数void* memcpy(void *dest,const void *src,int n){ if(NULL == dest||NULL ==src) { return NULL ; } char * tdest = (char*)dest;//save the start adress char * tsrc = (char*)src; if(tsrc< tdest && tsrc + n原创 2020-07-21 16:31:40 · 232 阅读 · 0 评论 -
网络编程之——多路IO转接(epoll模型)
epoll内部使用红黑树数据结构,epoll_create函数创建一个根节点并返回,epoll_ctl函数进行添加删除修改子节点。epoll操作过程需要三个接口,分别如下:#include <sys/epoll.h>int epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wait(int epfd, struct epoll_event原创 2020-07-20 16:25:58 · 201 阅读 · 0 评论 -
网络编程之——多路IO转接(poll模型)
poll函数原型struct pollfd { int fd; /* file descriptor */ short events; /* requested events */ short revents; /* returned events */};//fds 监听数组//nfds 监听数组的实际个数//timeout -1 无限超时// 0 立即返回// >0 超时返回 //返回值 >0结构体中reve原创 2020-07-14 15:06:25 · 136 阅读 · 0 评论 -
网络编程之——多路IO转接(select模型改进)
select模型中在处理监听事件时需要对文件描述符依次遍历,此处可以稍作改进,避免不必要的遍历。改进思路定义一个FD_SETSIZE大小的数组,用于存储有效连接定义一个下标变量用于记录存储连接数组中的有效连接最大下标,供遍历作为上限值使用int maxC = -1;int client[FD_SETSIZE];//存储连接的文件描述符for(int k=0;k<FD_SETSIZE;++k)//初始化{ client[k] = -1;}连接时处理if(FD_ISSET(lfd,原创 2020-07-14 10:39:07 · 148 阅读 · 0 评论 -
网络编程之——多路IO转接(select模型)
select模型优点 实现多路复用 避免了频繁创建多进程/多线程处理连接产生的开销,提高了连接处理效率缺点 最多监听1024个文件描述符 事件处理时需要依次遍历,带来不必要的开销select函数原型//nfds 最大描述符加1//readfds 输入输出参数 返回读事件文件描述符集合//writefds输入输出参数 返回写事件文件描述符集合//exceptfds输入输出参数 返回异常事件文件描述符集合//timeout 0 非阻塞 立即返回 NUL原创 2020-07-14 10:13:32 · 184 阅读 · 0 评论 -
网络编程之——简单socket服务端程序
服务器端代码执行步骤:1、创建socket;2、绑定服务器地址和端口 bind();3、设置监听参数 listen();4、等待链接 accept();5、关闭链接close().示例:#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/ip.h>#include <stdio.h>#include <原创 2020-07-09 15:47:41 · 291 阅读 · 0 评论 -
网络编程之——多进程并发服务器
思路:主进程循环等待连接,连接成功后创建一个子进程,在子进程中处理该连接的数据通信,然后在主进程中注册SIGCHLD中断信号回收子进程资源防止僵尸进程产生,主进程继续执行等待连接。示例:#include "wrap.h"#include <stdlib.h>//#include <stdio.h>#include <netinet/in.h>#include <netinet/ip.h>#include <arpa/inet.h>//原创 2020-07-09 16:12:42 · 321 阅读 · 0 评论 -
网络编程之——多线程并发服务器
思路:循环等待连接,连接成功后创建一个子线程处理该连接的数据通信,然后继续等待连接。socket接口封装:#include "wrap.h"#include <sys/types.h>#include <errno.h>#include <unistd.h>void sys_err(const char *ch){ perror(ch); exit(1);}int Socket(int domain, int type, int pr原创 2020-07-09 16:04:57 · 284 阅读 · 0 评论 -
基本排序算法实现汇总
最近有空复习了一下排序算,这里将各种基本排序算法实现总结了一遍,并整理到了一个类中,方便以后查询。头文件#ifndef _SORT_UTILS_H_#define _SORT_UTILS_H_#include <vector>using namespace std;template<class T>class CSortUtils{public: CSortUtils(); virtual ~CSortUtils(); typedef struct node原创 2020-07-07 11:12:03 · 132 阅读 · 0 评论 -
常见数据结构C实现之——二叉树
二叉树节点定义struct BinaryNode{ char t; struct BinaryNode* lChild; struct BinaryNode* rChild;};先序遍历//二叉树递归遍历void Recursion(BinaryNode* root){ if (root == NULL) { return; } printf("%c",root->t);//根结点 Recursio原创 2020-07-07 10:44:58 · 169 阅读 · 0 评论 -
常见数据结构C实现之——链式队列
数据结构定义struct LinkNode{ struct LinkNode* next;};struct LQueue{ struct LinkNode head; int nSize; struct LinkNode* tail;};typedef void* LinkQueue;头文件定义#ifndef LINK_QUEUE_H#define LINK_QUEUE_H//初始化LinkQueue initial_LinkQueue();原创 2020-07-06 17:20:24 · 119 阅读 · 0 评论 -
常见数据结构C实现之——基于链表的栈
定义外部使用的数据类型名typedef void* LinkStack;头文件定义#ifndef LINK_STACK_H#define LINK_STACK_H#include "stdlib.h"typedef void* LinkStack;//初始化栈LinkStack initial_LinkStack();//进桟void push_LinkStack(LinkStack lStack,void* data);//返回栈顶元素void* top_LinkStack(原创 2020-07-06 17:07:50 · 123 阅读 · 0 评论 -
常见数据结构C实现之——单链表
数据节点定义struct LinkNode{ struct LinkNode* next;};链表结构定义struct LList{ struct LinkNode head; int nSize;};类型重命名typedef void* LinkList;头文件定义#ifndef _LINKLIST_H#define _LINKLIST_H//#include <stdio.h>//#include "stdlib.h"typedef原创 2020-07-06 16:58:14 · 136 阅读 · 0 评论 -
常见数据结构C实现之——动态数组
#include<stdlib.h>#include<string.h>struct DynamicArray{ void** arr; int m_nCapacity; int m_nSize;};//initial arraystruct DynamicArray* init_DynamicArray(int nCapacity){ struct DynamicArray* pMyArr = (struct DynamicArra原创 2020-06-24 14:44:16 · 428 阅读 · 0 评论 -
C++线程池简单实现(windows)
思路:创建线程池时启动固定个数线程,线程函数中循环监听任务队列,取出任务并执行,在此处我将指针函数作为任务传递入口,存在弊端就是任务处理函数签名固定了,灵活性低。当然,也可以将任务进行封装,使用C++的多态特性来完成不同类型的任务。关键要点:1、使用queue作为消息队列的载体queue 的基本操作有:入队,如例:q.push(x); 将x 接到队列的末端。出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。访问队首元素,如例:q.front(),即最早被压入队列原创 2020-06-17 10:42:49 · 2350 阅读 · 2 评论 -
常见排序算法汇总
常言道:温故而知新。最近有空复习了一下排序算,这里将各种基本排序算法实现总结了一遍,并整理到了一个类中,方便以后温习。各种排序实现,CSortUtils类文件:#ifndef _SORT_UTILS_H_#define _SORT_UTILS_H_#include <vector>using namespace std;template<class T>clas...原创 2017-10-31 16:53:24 · 277 阅读 · 0 评论 -
鼠标操作图形旋转
算法思路: 寻找图形的中心点或者给定一个点,将影响图形形状的关键点绕着这个点旋转,然后根据旋转后的新值重绘图形。这里旋转的角度,即为鼠标移动开始点与定点的向量,和移动结束点与定点的向量之间的夹角。用到的数学公式: 部分函数实现://////////////////////////////////////////////////////////////////////////struct POI原创 2017-11-16 13:48:35 · 1506 阅读 · 0 评论 -
Qt窗体接受拖入图片文件
第一步,设置窗体属性;this->setAcceptDrops(true);//设置窗口启用拖动第二步,声明拖动事件函数;protected: void dragEnterEvent(QDragEnterEvent*event);//拖动进入事件 void dropEvent(QDropEvent*event); 第三步,函数实现。void CPaintAreaWidget原创 2017-11-16 11:32:00 · 1674 阅读 · 0 评论 -
判断一个点是否在多边形内部
如何判断一个点是否在多边形内部?(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。 (2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。 (3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。具体做法:将测试点的Y坐标与多边原创 2017-11-16 11:44:30 · 1868 阅读 · 0 评论 -
判断两线段是否相交,并求交点
首先, 上个示意图.根据图示, 线段a表示为端点a1和a2, 线段b表示为端点b1和b2. 为了利用向量的叉乘关系, 将线段的端点看成四个向量, 下面用粗体表示向量. 根据向量运算可知 a=a2-a1, b=b2原创 2017-11-28 14:39:57 · 23684 阅读 · 2 评论 -
STL 源码剖析
STL 源码剖析: http://www.cnblogs.com/raichen/p/5817158.html原创 2017-11-02 15:33:59 · 196 阅读 · 0 评论 -
QString与char*互转
1、QString转char*char* QStringToChar(const QString& qstring){ QByteArray byta = qstring.toLocal8Bit(); /*QByteArray byta1 = qstring.toLatin1(); string byta2 = qstring.toStdString(); QByt原创 2017-07-17 10:36:32 · 393 阅读 · 0 评论 -
贝塞尔曲线算法
思路:由于贝塞尔曲线由控制点控制,在计算完成前我们无法确切的知道曲线路径上将要绘制的像素点个数,所以我们可以采取逼近的策略,即将计算出的相邻两点使用直线连接,已达到近似效果。以下过程使用C语言实现//该类用来存储三维坐标typedef struct{ float x,y,z;}point3D;//整型数组typedef struct{ int length;原创 2017-06-15 11:07:23 · 893 阅读 · 0 评论 -
命令模式—C++实现撤消重做
Command结构 意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。适用性 1、抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(c a l l b a c k )函数表达这种参数化机制。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。C o m m a n d 模式是回调机制的一个面向对象的替原创 2017-11-22 14:25:03 · 6011 阅读 · 0 评论 -
C++使用SQLite数据库
1、下载sqlite3文件: 官网下载网址:http://www.sqlite.org/download.html。SQLite版本为SQLite 3.19.03,相关文件如下。 sqlite-dll-win32-x86-3190300.zip:包含sqlite3.def、sqlite3.dll文件。 sqlite-amalgamation-3190300.zip:包含sqlite3.h 文件原创 2017-07-19 14:57:49 · 2278 阅读 · 0 评论 -
Qt模拟全屏播放鼠标隐藏显示效果
.h文件#ifndef MYWIDGET_H#define MYWIDGET_H#include <QWidget>#include <QMouseEvent>#include <QTimer>class MyWidget : public QWidget{ Q_OBJECTpublic: MyWidget(QWidg...原创 2018-02-23 15:45:14 · 595 阅读 · 0 评论 -
Qt文件过滤器
Qt有一个功能:可以根据自定义的文件类型对路径下的文件进行过滤。 使用方法: 1.过滤目录下包括子目录内的文件//获取所选文件类型过滤器 QStringList filters;filters << QString("*.txt") << QString("*.TXT");//定义迭代器并设置过滤器 QDirIterator dir_ite...原创 2018-04-08 12:04:12 · 4745 阅读 · 0 评论