自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 问答 (7)
  • 收藏
  • 关注

原创 关于_T宏

直接看百度

2022-07-26 14:30:57 197 1

原创 实习项目 —— 导航调试系统

导航调试系统这是实习时项目的最终结果,上中下可以分为三个部分:实时播报区:连接上服务器后,服务器会一直发送数据到客户端;客户端就实时显示出来功能调试区:一些对服务器的调试结果输出区:调式的结果会反馈到该区域整个实习做了哪些事情,下面大概说一下。TCP客户端到公司的第一个任务,就是写一个Windows环境下的TCP客户端,有什么要求组长都吩咐了。具体的TCP客户端内容写在篇博客中。另外还为TCP客户端封装C++标准线程的my_thread类。编译log4cplus公司的其他项目

2022-02-28 23:07:25 298

原创 《具有自动校正功能的车牌识别系统 V1.0》使用说明书

2022-02-28 20:41:20 289

原创 封装一个TCP客户端类

TCPClient写一个Windows下的TCP客户端,功能比较简单。创建一个对象,即可连上服务器;并应用了一个有限状态机,在与服务器断开连接时,会自动尝试与服务器建立连接;在接收发送数据上,仅做测试通讯是否正常,被动接收数据,然后再把数据发送回给服务器;其中用到的my_std_thread.h,在另一篇文章有介绍TcpClient.h#pragma once#include <WinSock2.h>#include <stdio.h>#include "my_std

2022-02-28 16:53:05 2403 1

原创 封装一个C++的线程类

封装一个C++的线程类

2022-02-28 14:41:08 912

原创 Webserver简易项目

Webserver组成部分这个项目,粗略的看可以分为下面几个部分建立socket通讯服务器处理与客户端的IO解析客户端的HTTP请求,并响应请求建立socket通讯Webserver服务器,肯定不可能只接收一个客户端的连接吧。所以这个项目是多线程并发同步执行的,而这之中就存在许多需要处理的细节,共享资源的访问,建立并维护线程池等。locker.h线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量,或者某一线程不会读

2022-02-27 21:56:18 4637

原创 Linux线程与网络编程

线程线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 UNIX 进程只是多线程程序的一个特例,该进程只包含一个线程)线程是轻量级的进程(LWP:Light Weight Process),在 Linux 环境下线程的本质仍是进程。线程和进程的区别:进程是 CPU 分配资源的最小单位,线程是操作系统调度执行的最小单位。进

2021-10-03 21:01:25 187

原创 Linux文件和进程

文件虚拟地址空间从这张图片,有几个信息需要说一下第一:关于 int main(int argc, char* argv[]) ,以前可能编写“cin/cout”代码没遇到过,就提一下。其实就是在运行程序时,在后面添加的参数。argc表示参数个数,argv[]就是参数的集合例如Linux下有一个add的可执行程序,可以传入两个整型参数,会打印加之后的结果./add 10 20 如此运行程序即可第二:图片所示的4G空间,都是虚拟空间。其中栈空间的使用是从高地址往低地址,而堆空间则是从低地址

2021-09-24 16:31:46 439

原创 学习两个脚本

????脚本navDebuggingTools.sh#!/bin/shappname=`basename $0 | sed s,\.sh$,,`dirname=`dirname $0`tmp="${dirname#?}"if [ "${dirname%$tmp}" != "/" ]; thendirname=$PWD/$dirnamefiLD_LIBRARY_PATH=$dirnameexport LD_LIBRARY_PATH$dirname/$appname "$@"??

2021-09-22 17:06:51 670 1

原创 Linux系统下qt工程打包

????在Windows系统下,很容易就能将qt工程打包成一个单独的可执行程序,在任意Windows环境都能执行。在Linux系统编译出来的qt工程,就相对的没那么容易,网上教程繁多,这里我前前后后折腾了很久,终于弄到了可靠的方法。准备个脚本首先在Release模式下Run一遍我们的程序名是`navDebuggingTools`,我们可以在`build-navDebuggingTools-Desktop_Qt_5_12_9_GCC_64bit-Release`目录下,**打开终端,进入当前

2021-09-18 17:38:18 840

原创 在Linux中查看文件的编码及对文件进行编码转换

如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码vi xxx.txt:set fileencoding即可显示文件编码格式。如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的.

2021-09-17 09:50:41 7919 2

原创 log4cplus在Linux下的安装以及在qt中的使用

下载log4cplus下载链接点击链接后,选择2.0.6版本,然后就能看到一个绿色按钮Download Latest Version比较有趣的是,在Windows环境下和Linux环境下的浏览器浏览这个网站,这个下载按钮还有些不同,点击后下载的压缩文件是对于环境下的格式WindowsLinux如果点击后,并没有任何下载,可以再点击Get Updates安装下载好后,如果使用的是高版本Ubuntu,似乎可以直接打开.tar.xz文件,拖拽出来否则就敲命令行在压缩包所在目录打开

2021-09-14 17:39:21 631

原创 qt在Linux中的创建快捷键

创建快捷键网上有很多安装qt的教程,我跟着教程前前后后安装了好多个qt…原因是想要安装有32位构建套件(Kits)的qt,可以直接编译出32位的程序在安装了多个老版本的qt后结果发现都没用,好像是官方删掉了。当然,在CSDN的资源中似乎有,但没尝试过所以才会有前面的来来回回安装了好多个qt虽然没有把这件事做好,这也不能怪我是吧,但在这之间,我发现我安装的4.0,5.1,5.9都有启动图标,明显一个Qt Creator图标而在放弃安装32位Kits后,为了和Windows中开发环境一致,我

2021-09-14 11:25:40 538

原创 sudo vim找不到

提示 sudo vim 找不到命令 原因是因为没有安装vim,下面我们就来在终端进行安装一下1.进入终端 Ctrl + Alt +T 出现终端窗口2.输入命令: sudo apt-get install vim-gtk3.验证是否成功安装完vim后查看命令 vi tab键,就会关联出所有vi开头的命令,看是否有vim,有则成功.4.美化vim刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它。在命令行下,输入命令:sudo vim /etc/

2021-09-01 16:43:22 12442 1

原创 两个小坑

????一条语句中,使用多个i++,并不是自以为的从左到右依次i++#include <iostream>using namespace std;int main(){ int i=0; cout<<i++<<" "<<i++<<endl; cout<<i++<<" "<<i++<<endl;} 1 03 2也不知道为什么是这个输出????C++查询整型数组的大小,一

2021-08-26 10:50:04 76

原创 QTimer的妙用

????在qt中,想要某个函数一直运行或者每隔一段时间运行一次,却又不想开线程,毕竟线程麻烦又容易出错,这个时候就可以用connect()和QTimer组合 QTimer *checkLinkStatus; /*计时器checkLinkStatus,每0.1s检查一次服务器连接状态*/ checkLinkStatus = new QTimer(this); connect(checkLinkStatus, &QTimer::timeout, this, &navDebuggin

2021-08-25 15:16:23 278

原创 vs2017+qt5.12.9项目打包成一个exe

项目改成release因为这个项目还用到了日志库log4cplus编译出来的动态链接库dll,而平时项目以及这个链接库用的都是Debug版本,所以日志库还需要重新编译Release_Unicode版本的dll再修改一些项目属性什么的,编译通过即可打包一、将编译好的exe复制到一个空文件夹中二、在当前目录下的命令行窗口,输入windeployqt xxx.exe这里有个小技巧,在当前文件夹的目录出,输入cmd,可以快捷打开该目录的命令行窗口然后输入windeployqt

2021-08-19 17:59:13 1890 3

原创 qt实现点击按钮增加输入框的功能

????要求是:设计一个按钮,点一下,增加一栏输入框????‍????先用设计器写上可以写死的控件然后思路就是:输入框的控件是QLineEdit,那就创建QLineEdit的数组,然后链接 + 按钮,在设置一下输入框和 + 的位置就可以了上代码// .h头文件private: QLineEdit *x[200],*y[200]; int x_spacing = 80; int y_spacing = 130; int i = 0; int lineedit_n

2021-08-05 13:58:28 2959 6

原创 C++ 把类成员函数写为回调函数

回调函数什么是回调函数就不解释了,但为什么要开一篇来特别讲一下如何把类成员函数写回调函数?如果回调函数是普通函数,其实普通函数就可以直接拿来当作回调函数,在设置回调函数中,注意与回调函数的返回值类型,参数列表一一对应即可但类成员函数不同,在参数列表中,其实是隐藏了第一个指针型(void*)参数this,这就会导致和设置回调函数的参数列表不匹配,没法成功安装解决方法有三种将回调函数设置为静态将回调函数设置为友元使用bind绑定静态TcpClient.htypedef void(*

2021-07-14 17:44:37 467

原创 Windows下vs2019使用log4cplus

log4cplus编译在自己的项目中,要使用日志库log4cplus,就必须先把这个日志库编译出静态库或动态库,但给日志库编译时,有几点需要注意。下面从头开始,一步一步记录。下载Log4cplus库的下载地址:https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/这里日志库下载最新版本,vs也是最新版本即可配置(1)进入到 log4cplus-2.0.6\msvc14目录下,运行log4cplus.sln解决方案。

2021-07-13 10:56:29 1540

原创 封装一个Windows环境下TCP客户端类

撒花搞了几天吧,总算是勉强满足了公司大佬的要求直接上代码,再说说大佬的要求等等TcpClient.h#pragma once#include <WinSock2.h>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")#include <functional>using namespace std;class TcpClient;typedef function<void(char*, in

2021-07-08 15:50:01 256

原创 LNK2001 无法解析的外部符号 “private: static unsigned __int64 TCPClient::sclient“

前言实习时编写一个TCP客户端,要求设置一个回调函数查了下,回调函数不能是成员函数,但可以是静态成员函数或者是友元函数于是把这个回调函数设置成了静态成员函数,但函数内又调用了该类的某个成员变量而静态成员函数只能调用同为静态的成员函数和成员变量所以又把这个成员变量也设置为静态本以为这样就对了,起码vs2019不会出现红色波浪线了但还是出现了报错代码如下TCPClient.hclass TCPClient{ private: static SOCKET sclient; p

2021-07-06 14:20:51 295

原创 Windows环境下TCP通信的服务端和客户端

服务端建立socket套接字绑定接收端口 bind()监听网络端口 listen()等待接收客户端连接 accept()向客户端发送数据 send()关闭套接字 closesocket()建立socket套接字#include <stdio.h>#include <winsock2.h>#include <iostream>#pragma comment(lib."ws2_32.lib">using namespace std;in

2021-07-02 16:42:06 990 2

原创 Qt_翻金币02

金币类金币这个对象,和金币翻转这个特效,其实是可以看作是按钮和按钮的特效吧,就和前面的返回按钮一样,但这里需要重新定义金币类,因为前面封装的MyPushButton已经不合适了,很多功能在金币这里都用不到,而金币需要的功能又没有#ifndef MYCOIN_H#define MYCOIN_H#include <QPushButton>class MyCoin : public QPushButton{ Q_OBJECTpublic: // 参数功能 显示默认是

2021-05-12 15:26:01 149 3

原创 Qt_翻金币01

游戏首界面窗口创建一个MainScene主体,继承自QMainWindow,这里我们重写父类的一个方法void paintEvent(QPaintEvent *event);在mainscene.cpp中// 绘图事件void MainScene::paintEvent(QPaintEvent *event){ // 设置背景 QPainter painter(this); QPixmap pix; pix.load(":/res/Play

2021-05-11 18:48:39 287 3

原创 Qt_09

文件读写#include "widget.h"#include "ui_widget.h"#include <QFileDialog>#include <QFile>#include <QMessageBox>#include <QTextCodec>Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi

2021-05-08 19:51:41 102

原创 Qt_08

基本绘图事件 void paintEvent(QPaintEvent *);先在widget.h中声明重写paintEvent函数#include <QPainter>void Widget::paintEvent(QPaintEvent *){ QPainter painter(this); // 画家painter在this上作画 this就是Widget // 设置画笔 QPen p(QColor(255,0,0));

2021-05-08 18:46:02 79

原创 Qt_07

计时器#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); // 显示有问题 加粗边框 ui->label->setStyleSheet("border: 1px solid #abc88b"); ui->label_2-&

2021-05-08 13:53:31 79

原创 Qt智能提示

办它!!看视频里的老师敲代码智能提示贼好用,自己的智能提示却跟智障一般老师:写函数啊,如果敲了括号还没出来参数提示,就把括号删了,再敲括号,就能出来了我:()??()????()????????????还好遇到高人了帮助-> 关于插件 -...

2021-05-08 09:49:55 947 1

原创 Qt_06

封装在Qt中,有一些控件可以合成一个组合控件,就比如拖动滑块,数字会变化;修改数字,滑块会动创建Qt设计师界面类在新建的项目Widget下,再Add New,选择Qt、Qt 设计师界面类,这里就创建一个叫Item的设计师界面类,它会同时生成.cpp、.h和.ui文件然后,我们要组合封装的控件,在item.ui实现只需把要组合的控件放进去,水平布局啥的细节操作一下就算是组合到了组合后,先看一下这组合控件是布局在哪个类的对象上,这里是QWidget,其实就是刚创建Qt 设计师界面类时选择

2021-05-08 09:25:15 152

原创 Qt_05

QTreeWidget#include "widget.h"#include "ui_widget.h"#include <QTreeWidgetItem>Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); ui->treeWidget->setHeaderLabels(QStringList()<&l

2021-05-07 13:37:28 84

原创 Qt_04

.ui这个也没什么好说的,多做做就是了就是有一个点,在添加组件时,要初始化组件,如果输入中文没反应,那这个初始化组件其实是在初始化该组件的一个对象,对象不能有中文吧,要给组件写上名称,在右下角actionNew是该组件的对象的名,新建是该组件的标题资源文件一般的软件,新建选项的前面都有个图标吧,这是程序添加了图片文件 ui->actionNew->setIcon(QIcon("D:\\favicon.png"));这样是可以的,但问题是,我这个软件一旦在别的计算机打开,ac

2021-05-06 14:33:32 86

原创 Qt_03

QMainWindowQMainWindow是一个为用户提供主窗口程序的类,继承于QWidget,包含一个菜单栏栏menu bar、多个工具栏tool bars、多个铆接部件dock widgets、一个状态栏status bar、一个中心部件central widget,是许多应用程序的基础,如文本编辑器,图片编辑器等其中铆接部件,就是导航栏这种,可以移动又可以贴回去菜单栏 //菜单栏 一般只有一个 QMenuBar *menu = menuBar(); //依赖到窗口上

2021-05-05 15:20:17 74

原创 别再“Hello World”编程了

前言刚开始学C++,一个.cpp文件就够了,类的定义,声明,实现统统都堆在一个文件中,然后编译连接,生成.exe文件,就完成作业了。但开始接触项目后,需要和别人一起完成一个大作业时,写在同一个main.cpp明显会有些乱套,这时候,就需要分离编译了先了解一下,我们使用的visual studio 2019或者是 DevC++都是怎么将我们编写的.cpp文件变成.exe可执行文件详细可以看跟我一起写 Makefile(一)分离编译分离编译模式是指:一个程序(项目)由若干个.cpp源文件共

2021-05-04 19:14:16 90

原创 Qt_02

信号和槽信号和槽,本质都是事件,或者说是某种动作,一个触发一个响应信号信号一般写在头文件中,也就是类中,需要关键字signals限定,就像private、protected、public等此外信号有几个特点只返回void只需要声明,不需要实现,即函数体自定义信号可以重载在teacher.h举个例子#ifndef TEACHER_H#define TEACHER_H#include <QObject>class Teacher : public QObject

2021-05-04 13:03:43 127

原创 Qt_01

概述Qt是什么?Qt是一个跨平台的C++图形用户界面应用程序框架。它是完全面向对象的,很容易扩展,并且允许真正的组件编程优点:跨平台接口简单简化了内存回收支持嵌入式开发成功的案例:Linux桌面环境KDEWPS office办公软件Google Earth谷歌地图VirtualBox虚拟机软件项目创建的项目名不能有中文这是常识,而且该软件也不会允许你创建包含中文的项目;你项目所在的路径,也不能有中文,但它不会报错,只是不能运行基类在创建项目时,要创建

2021-05-03 19:24:30 135

原创 动态规划篇 (一)

方法这里开始,跟着代码随想录大佬的脚步,刷leetcode大佬给的五部曲和灵魂三问,还挺好使的对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组如果代码写出来了,一直AC不了,灵魂三问:这道题目我举例推导状态转移公式了么?我打印dp数组的日志了么?打印出来了dp数组和我想的一样么?哈哈,专治各种代码写出来了但AC不了的疑难杂症。

2021-04-29 21:27:07 223

原创 关于字符串的排序问题

标准库给的跟排序有关的函数,在对象是字符串类型的数组或者容器时,都并非简单的长度问题其实前面有片文章已经提到过,对简单题的一套组合拳,觉得这不是个小发现,就特意写了篇文章记录下int main(){ vector<string> str; str = {"flweeer","fl","eeeqt","z","aaaaaaaaaaaaa"}; cout<<*min_element(str.begin(),str.end())<<endl;

2021-04-28 21:28:12 197

原创 桌面贪吃蛇

C++实战项目C++开发,主要做的是Windows桌面应用程序的开发,这里就用到了visual studio 2019这个工具。这里新建一个开发win桌面应用的项目新建选择Windows桌面导向,这个其实就是老visual studio中的Win32项目设置好项目名和项目所在路径,创建应用程序类型:桌面应用程序(.exe)其他选项:空项目(E)建立桌面应用程序新建完成后,就在源文件下新建.cpp文件,开始写代码,项目完成调试运行,自动就会生成.exe应用程序下面就开始介绍整个程

2021-04-28 17:17:38 633

原创 对简单题一套组合拳

最长公共前缀不难,但是弯弯绕绕多一些class Solution {public: string longestCommonPrefix(vector<string>& strs) { int len = strs.size(); sort(strs.begin(),strs.end(),[](string a,string b){return a.length()<b.length();}); if(len == 1

2021-04-26 20:55:16 80

Windows下C++封装的TCP客户端类

是本人在实习时,带我的老大帮助下做的,封装好了,只需要创建一个对象,就能开始运行,算是能满足一般公司的需求。但这里面还用到了我老大写的封装了C++多线程thread的类,我没有放进去,替换一下就可以,很简单的。最后还附赠我测试用的SocketTool软件,简单实用,童叟无欺

2021-07-27

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

TA关注的人

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