<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Cong的专栏]]></title><description><![CDATA[站得更高，看得更远]]></description><link>https://blog.youkuaiyun.com/wcl0617</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wcl0617]]></copyright><item><title><![CDATA[QTableView表格添加菜单]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/109051069</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/109051069</guid><author>wcl0617</author><pubDate>Tue, 13 Oct 2020 14:51:17 +0800</pubDate><description><![CDATA[#include &lt;QTableView&gt;
#include &lt;QStandardItemModel&gt;
#include &lt;QMenu&gt;
#include &lt;QHeaderView&gt;
QTableView* m_tableView =  new QTableView(this);
QStandardItemModel* m_itemModel = new QStandardItemModel(this);

	//添加表头
	m_itemModel-&gt;s]]></description><category></category></item><item><title><![CDATA[QOpenglWidget使用示例]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/108886210</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/108886210</guid><author>wcl0617</author><pubDate>Wed, 30 Sep 2020 15:41:17 +0800</pubDate><description><![CDATA[opengl相关库文件
opengl32.lib
glu32.lib
Glaux.lib
glew32.lib

#ifndef CMYOPENGLWIDGET_H
#define CMYOPENGLWIDGET_H

//#include "TextureManager.h"
#include &lt;QOpenGLWidget&gt;

class CMyOpenGLWidget : public QOpenGLWidget
{
	Q_OBJECT

public:
	CMyOpenGLWidget(Q]]></description><category></category></item><item><title><![CDATA[Qt http网络请求]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/108773130</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/108773130</guid><author>wcl0617</author><pubDate>Thu, 24 Sep 2020 14:17:15 +0800</pubDate><description><![CDATA[#include &lt;QNetworkAccessManager&gt;
#include &lt;QNetworkRequest&gt;
#include &lt;QNetworkReply&gt;
#include &lt;QSslSocket&gt;
#include &lt;QSslConfiguration&gt;
#include &lt;QTime&gt;
#include &lt;QApplication&gt;
#include &lt;QDebug&gt;

方式一
		QUrl u]]></description><category></category></item><item><title><![CDATA[opencv将图片生成视频]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/108772728</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/108772728</guid><author>wcl0617</author><pubDate>Thu, 24 Sep 2020 13:56:43 +0800</pubDate><description><![CDATA[CV_FOURCC获取编码格式：
CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_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]]></description><category></category></item><item><title><![CDATA[基于window多线程实现web服务端]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/108753092</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/108753092</guid><author>wcl0617</author><pubDate>Wed, 23 Sep 2020 14:55:21 +0800</pubDate><description><![CDATA[实现源代码
#ifndef _HTTP_SERVER_H
#define _HTTP_SERVER_H

#include &lt;WinSock2.h&gt;
#include &lt;process.h&gt;
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

#pragma  comment(lib,"ws2_32.lib")

#define  BUF_SIZE 2048
#define  BUF_SMALL 100
#def..]]></description><category></category></item><item><title><![CDATA[Qt程序退出QThread: Destroyed while thread is still running问题]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/108533456</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/108533456</guid><author>wcl0617</author><pubDate>Fri, 11 Sep 2020 14:15:37 +0800</pubDate><description><![CDATA[Qt程序退出QThread: Destroyed while thread is still running问题解决方法：
在主线程中使用new Qthread在堆上创建，即可解决。

]]></description><category></category></item><item><title><![CDATA[旋转矩阵]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/108128124</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/108128124</guid><author>wcl0617</author><pubDate>Thu, 20 Aug 2020 17:23:53 +0800</pubDate><description><![CDATA[二维旋转矩阵(顺时针)
（x1,y1） = (x,y)[cos(tha) sin(tha)]
[-sin(tha) cos(tha)]
三维旋转矩阵(顺时针)


]]></description><category></category></item><item><title><![CDATA[链表翻转实现]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107859449</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107859449</guid><author>wcl0617</author><pubDate>Fri, 07 Aug 2020 11:57:31 +0800</pubDate><description><![CDATA[链表节点数据结构定义
struct LinkListNode{
	void* data;
	struct LinkListNode* next;
};

递归方法
//递归实现链表翻转
struct LinkNode* reverse(struct LinkNode* lNode)
{
    if(lNode-&gt;next == NULL)
    {
        return lNode;
    }

    struct LinkNode* nodeTemp = reverse(lNode-]]></description><category></category></item><item><title><![CDATA[C++标准库中string简单实现]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107837976</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107837976</guid><author>wcl0617</author><pubDate>Thu, 06 Aug 2020 14:03:36 +0800</pubDate><description><![CDATA[头文件
#ifndef STRING_H
#define STRING_H
#include &lt;iostream&gt;

using namespace std;
class String
{
public:
    String(const char * str = NULL);
    String(const String &amp;str);
    ~String();

    String operator+(const String&amp; str) const;
    Stri]]></description><category></category></item><item><title><![CDATA[C++智能指针简单实现]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107837785</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107837785</guid><author>wcl0617</author><pubDate>Thu, 06 Aug 2020 13:55:21 +0800</pubDate><description><![CDATA[#ifndef SHARE_PTR_H
#define SHARE_PTR_H

template&lt;typename T&gt;
class CSharePtr
{
public:
    CSharePtr( T* ptr)
    {
        if(ptr)
        {
            m_pPtr = ptr;
            m_nRef = 1;
        }else
        {
            m_nRef = 0;
         ]]></description><category></category></item><item><title><![CDATA[内存分配]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107783242</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107783242</guid><author>wcl0617</author><pubDate>Tue, 04 Aug 2020 11:45:00 +0800</pubDate><description><![CDATA[转载自：https://zhuanlan.zhihu.com/p/29632368
1.内存分配方式
　　内存分配方式有三种：
　　[1]从静态存储区域分配。内存在程序编译的时候就已经分配好，这块内存在程序的整个运行期间都存在。例如全局变量，static变量。
　　[2]在栈上创建。在执行函数时，函数内局部变量的存储单元都可以在栈上创建，函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中，效率很高，但是分配的内存容量有限。
　　[3]从堆上分配，亦称动态内存分配。程序在运行的时候用m]]></description><category></category></item><item><title><![CDATA[常用字符串函数实现]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107491778</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107491778</guid><author>wcl0617</author><pubDate>Tue, 21 Jul 2020 16:31:40 +0800</pubDate><description><![CDATA[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&lt; tdest &amp;&amp; tsrc + n]]></description><category></category></item><item><title><![CDATA[网络编程之——多路IO转接(epoll模型)]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107466075</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107466075</guid><author>wcl0617</author><pubDate>Mon, 20 Jul 2020 16:25:58 +0800</pubDate><description><![CDATA[epoll内部使用红黑树数据结构，epoll_create函数创建一个根节点并返回，epoll_ctl函数进行添加删除修改子节点。
epoll操作过程需要三个接口，分别如下：
#include &lt;sys/epoll.h&gt;
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]]></description><category></category></item><item><title><![CDATA[网络编程之——多路IO转接(poll模型)]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107336527</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107336527</guid><author>wcl0617</author><pubDate>Tue, 14 Jul 2020 15:06:25 +0800</pubDate><description><![CDATA[poll函数原型
struct pollfd {
	int   fd;         /* file descriptor */
	short events;     /* requested events */
	short revents;    /* returned events */
};
//fds  监听数组
//nfds 监听数组的实际个数
//timeout -1 无限超时
//		   0 立即返回
//		  &gt;0 超时返回     
//返回值   &gt;0结构体中reve]]></description><category></category></item><item><title><![CDATA[网络编程之——多路IO转接(select模型改进)]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107332606</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107332606</guid><author>wcl0617</author><pubDate>Tue, 14 Jul 2020 10:39:07 +0800</pubDate><description><![CDATA[select模型中在处理监听事件时需要对文件描述符依次遍历，此处可以稍作改进，避免不必要的遍历。
改进思路
定义一个FD_SETSIZE大小的数组，用于存储有效连接
定义一个下标变量用于记录存储连接数组中的有效连接最大下标，供遍历作为上限值使用
int maxC = -1;
int client[FD_SETSIZE];//存储连接的文件描述符
for(int k=0;k&lt;FD_SETSIZE;++k)//初始化
{
	client[k] = -1;
}

连接时处理
if(FD_ISSET(lfd,]]></description><category></category></item><item><title><![CDATA[网络编程之——多路IO转接(select模型)]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107331298</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107331298</guid><author>wcl0617</author><pubDate>Tue, 14 Jul 2020 10:13:32 +0800</pubDate><description><![CDATA[select模型
优点    实现多路复用  避免了频繁创建多进程/多线程处理连接产生的开销，提高了连接处理效率
缺点    最多监听1024个文件描述符        事件处理时需要依次遍历，带来不必要的开销
select函数原型
//nfds 最大描述符加1
//readfds 输入输出参数   返回读事件文件描述符集合
//writefds输入输出参数   返回写事件文件描述符集合
//exceptfds输入输出参数   返回异常事件文件描述符集合
//timeout 0 非阻塞 立即返回   NUL]]></description><category></category></item><item><title><![CDATA[网络编程之——多进程并发服务器]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107231271</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107231271</guid><author>wcl0617</author><pubDate>Thu, 09 Jul 2020 16:12:42 +0800</pubDate><description><![CDATA[思路：主进程循环等待连接，连接成功后创建一个子进程，在子进程中处理该连接的数据通信，然后在主进程中注册SIGCHLD中断信号回收子进程资源防止僵尸进程产生，主进程继续执行等待连接。
示例：
#include "wrap.h"
#include &lt;stdlib.h&gt;
//#include &lt;stdio.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;netinet/ip.h&gt;
#include &lt;arpa/inet.h&gt;//]]></description><category></category></item><item><title><![CDATA[网络编程之——多线程并发服务器]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107230932</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107230932</guid><author>wcl0617</author><pubDate>Thu, 09 Jul 2020 16:04:57 +0800</pubDate><description><![CDATA[思路：循环等待连接，连接成功后创建一个子线程处理该连接的数据通信，然后继续等待连接。
socket接口封装：
#include "wrap.h"
#include &lt;sys/types.h&gt;
#include &lt;errno.h&gt;
#include &lt;unistd.h&gt;

void sys_err(const char *ch)
{
    perror(ch);
    exit(1);
}

int Socket(int domain, int type, int pr]]></description><category></category></item><item><title><![CDATA[网络编程之——简单socket客户端程序]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107230580</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107230580</guid><author>wcl0617</author><pubDate>Thu, 09 Jul 2020 15:54:12 +0800</pubDate><description><![CDATA[客户端代码执行步骤：
1、创建socket;
2、连接服务器 connect() （参数传递服务端IP地址和端口）;
3、数据通信
4、关闭连接 close().
示例：
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;netinet/ip.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;unistd.h&gt;
#include &lt;ctype.h&gt;
]]></description><category></category></item><item><title><![CDATA[网络编程之——简单socket服务端程序]]></title><link>https://blog.youkuaiyun.com/wcl0617/article/details/107230286</link><guid>https://blog.youkuaiyun.com/wcl0617/article/details/107230286</guid><author>wcl0617</author><pubDate>Thu, 09 Jul 2020 15:47:41 +0800</pubDate><description><![CDATA[服务器端代码执行步骤：
1、创建socket;
2、绑定服务器地址和端口 bind();
3、设置监听参数 listen();
4、等待链接 accept();
5、关闭链接close().
示例：
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;netinet/ip.h&gt;
#include &lt;stdio.h&gt;
#include &lt]]></description><category></category></item></channel></rss>