自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么时候重写拷贝构造函数和拷贝赋值函数

#include <iostream>#include <string>using namespace std;class CTest{public: CTest(int iData, string strData) { m_iData = iData; m_strData = strData; cout << "" << endl; } CTest(const CTest& test) { m_iDat...

2021-09-09 00:12:30 684

原创 C++ 关键字explicit的使用

C++中的explicit关键字只用于修饰类构造函数,且该构造函数只有一个参数,或者构造函数有n个参数,但有n-1个参数提供了默认值,。explicit的作用是表明该构造函数是显示的, 而非隐式的,不能隐式转换, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。首先要清楚一个概念——对象构造时的隐式转换。通过下面的示例,来了解下对象构造时的隐式转换#include <iostream>using namespa

2021-09-01 10:43:15 807

原创 TCP通信“粘包问题”及其解决办法

使用TCP通信时,如果双方通信频繁,

2021-02-24 11:37:37 1738

原创 使用windeployqt自动将使用qt开发的exe所需的依赖文件( 包含dll等)导入到exe目录下

使用qt开发exe时,编写好程序编译后得到一个exe文件,而这个exe文件往往需要依赖Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll等动态库。如果手动将依赖的文件一个个拷贝到程序目录下,不仅耗时还容易出错(特别是如果在开发者本地电脑一个个将所需要的文件拷贝到程序目录下后运行没问题后,该程序在其他人电脑上运行仍存在缺少依赖库的情况(因为开发者电脑上的由于开发需要往往安装开发套件更多、系统环境变量等设置的路径更多))。使用qt官方提供的windeployqt可以自动将使用qt开发

2021-02-20 19:45:05 793

原创 话说笔记(V1.0.0)的设计和实现

总体介绍话说笔记(WordsNote)1.0版本为单机版,即不需要联网,数据等都存储在本地。主要使用QT开发完成。主要功能是以日记的方式记录数据以及以文档的方式记录数据,支持多用户(即多个用户的注册、登陆)。以日记的方式记录数据,即按照日期记录数据,其中具有日历最后要加一张截图以文档的方式记录数据,即最后要加一张截图实现涉及到的技术Qt相关:QtreeView,信号槽,QTextEdit(主要涉及文本格式)数据库:sqlite表结构设计...

2021-02-15 16:03:46 2265 3

原创 QT实现Ctrl+S快捷键(组合快捷键)

首先要清楚,CTRL+S的组合快捷键中,CTRL是“修饰键”,S是“按键值”(平时使用的组合快捷键都是要先按下修饰键再按按值键,顺序反了就没有组合键的效果了)QT按键按下的事件QKeyEvent中有key()和modifier(),key()函数返回的是发生时间的按键值,modifier()返回的而是修饰键。因此重载QT的eventFilter或者event函数即可获取的按键按下的事件,使用按键按下的事件QKeyEvent的key()和modifier()即可获取按下的组合键,从中实现相应的操作。

2021-01-02 19:51:09 3552

原创 好记性不如烂笔头1——基类的析构函数要声明为虚函数

析构函数要声明为虚函数

2020-12-29 16:22:59 293

原创 C++文件及文件夹操作整理(代码示例)

windows写文件DWORD dwReturn;std::string strIamgePath = m_strImageTempPath + GUID_Generator() + ".jpg";HANDLE hFile = CreateFileA(strIamgePath.c_str(), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);WriteFile(hFile, pAl

2020-11-19 16:48:05 3019 5

原创 JavaWeb静态资源访问流程

JavaWeb静态资源访问流程

2020-10-20 22:39:57 1350

原创 tomcat通过Java的反射机制自动调用servlet的init、service等方法的模拟

tomcat通过反射自动调用servlet的init、service方法的模拟

2020-10-11 19:54:30 772 7

原创 五子棋程序设计及实现(Qt实现)

1. 选中黑棋和白棋的状态2. 黑棋和白棋交替3. 边框有多出来的一部分4. 一方获胜后,不能再下棋5. 重新开始的按钮6. 最左边和最右边的棋子不在计算5个棋子当中

2020-09-16 19:50:23 2275 2

原创 macOS下QT设置应用程序图标、程序坞图标

1. 设置应用程序图标(finder中展示的图标)在Qt助手(QT Assistant)中,输入“setting”,可以看到下面的列表中有Setting the Application Icon,双击它就可以看到右侧窗口中的帮助文档,帮助文档里介绍了如何设置应用程序图标。文档内容很全面,包括如何设置windows、OS X和linux的程序图标。这里我们介绍如何设置macOS下应用程序的图标。如Qt助手中介绍的方法,QWindows::setWindowIcon()只能设置在程序坞中展示的图标,

2020-08-29 16:13:15 2009 3

原创 设计模式(C++实现)(总)

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式乃一个程序员的内功修炼。有很多关于设计模式的书籍,比如轻松易读的《大话设计模式》、最为经典的GoF的《设计模式》、国人的经典原创《道法自然》等,网上关于设计模式的资料也非常多,且内容全面。但关于设计模式的书籍和网上的资料使用C++代码来举例实现的并不多,例如G

2020-08-27 14:45:19 549

原创 一图了解Windows下进程间通信的8种方法

2020-08-26 19:24:05 382

原创 Windows下QT设置应用程序(exe)图标、任务栏托盘图标、任务栏窗口图标

2020-08-11 18:47:39 9464

原创 Visual Studio开发使用技巧

1. 前言工欲善其事,必先利其器。想要提升开发效率,熟练掌握ide的基本使用十分重要,而掌握ide提供的各种方便快捷功能,更是能够在开发过程中达到事半功倍的效果。Visual Studio作为一款十分强大的集成开发环境,提供了各个各样的能力给开发者,其中有些功能不易被发现,而这些掌握这些功能,恰恰可以很大的提升开发效率。本文总结了8个十分便捷高效的VS开发使用技巧,希望这些总结分享能够帮助到使用VS进行开发的开发人员。2. Visual Studio开发使用技巧2.1 神奇的工具箱VS提

2020-08-02 15:56:03 1242

原创 C++通过IO完成端口实现线程池(包含实现原理及实现源代码)

线程池的定义及其原理线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。 例如,线程数一般取cpu数量+2比较合适,线程...

2020-07-09 23:11:43 1289

原创 自定义QWidget作为QListWidget的Item时偶尔出现位置偏移问题的解决方法和原理

现象解决方法CTestListWidget.cppui->listWidget_Video->setResizeMode(QListView::Adjust);ui->listWidget_Video->setViewMode(QListView::IconMode);ui->listWidget_Video->setSpacing(10);CVideoScreenShotDelegate *delegate = new CVi...

2020-06-27 20:59:31 4255 8

原创 QListWidget自定义item的两种方式(二)——使用QWidget作为item

暂无

2020-06-27 19:30:19 11830 9

原创 QListWidget自定义item的两种方式(一)——使用Delegate

步骤:1. 派生QStyledIemDelegete得到一个子类class MyItemDrawer : public QStyledItemDelegate2. 为QListWidget指定一个delegateMyItemDrawer* pDele = new MyItemDrawer(ui.listWidget);ui.listWidget->setItemDelegate(pDele);3.QStyledIemDelegete派生得到的子类,重写pai...

2020-06-26 15:50:31 6838 1

原创 编程时遇到代码在不同电脑上中文显示有的正常,有的是乱码的情况的问题原因

编程时遇到代码在在不同电脑上中文显示有的正常,有的是乱码的情况关于这个问题,首先要明确一点,每个文本文件都有自己的编码格式,每台电脑在编辑文字的时候就采用了自己的默认编码格式把数据写入到文件中。而不同电脑或者不同编译器默认的编码格式不同会造成同样的文字内容写入到文件的二进制内容是不一样的。比如下面的示例,test1.txt和test2.txt内文本内容同样是“这是测数据”,但是test1....

2020-05-05 20:17:08 3007

原创 跨平台编程(三)——VisualGDB

VisualGDB的功能介绍环境:VS2008 +VisualGDB5.1.61. 安装VisualGDB既下载安装VisualGDB,并激活。2. 创建VisualGDB工程1)文件->新建->项目,选择VisualGDB->Linux Project Wizard,填写好项目名称、及位置后,点击确定,如图ps:第一次创建的时候,...

2020-05-05 19:16:43 1546

原创 qss样式的作用范围及其替换、覆盖

1. qss的作用范围1)设置全局样式可以在main函数中,直接给QApplication设置样式,此样式为全局样式,对整个应用都生效QString qstrStyle = "QPushButton{color:blue;}"a.setStyleSheet(qstrStyle);2)设置窗口样式可以给某个窗口对象设置样式w.setStyleSheet(qstrSty...

2020-04-29 23:20:14 3147

原创 linux下指定运行程序所需要的.so文件路径的四种方式

1. export LD_LIBRARY_PATH=`具体路径` 将某具体路径添加到动态库路径环境变量,但仅当前终端有效2. 将.so文件放到/lib或/usr/lib目录下(不推荐)3. 将库文件绝对路径添加到/etc/ls.so.conf文件中,并用ldconfig命令重建ld.so.cache文件(不推荐)4. 增加编译链接参数 (LDFLAGS = -Wl,--hash-s...

2019-11-12 14:55:26 13911

原创 C++从代码到可执行程序

1. 从代码到可执行程序的执行无论是windows操作系统还是linux操作系统,C++编写代码到可执行程序的执行,都经过了预处理、编译、汇编、链接、运行5个步骤。有时候我们也将预编译、编译和汇编统称为编译。下面分别介绍这5个步骤预处理预处理过程进行的操作:1. 将所有的“#define”删除,并且展开所有的宏定义2. 处理所有的条件编译指令,比如“#if”、“#ifdef”、“...

2019-10-28 16:52:00 1633

原创 QT Creator 常用操作

全工程查找:edit - find/replace - advanced find - open advanced find快捷方式:ctrl+shift+fF4在头文件和代码之间切换F2在声明和实现之间切换Ctrl + k打开定位器(locator)Ctrl + Shift + f 打开全局搜索框Ctrl + f 打开当前页面搜索框Ctrl + 鼠...

2019-09-22 20:40:54 267

原创 QT用户界面类的关系及QWidget、QDialog及QMainWindow的区别

QWidget类是所有用户界面对象的基类。 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按Z轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。 QMainWindow 类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的...

2019-09-19 16:54:05 949

原创 C++使用openssl对数据进行加解密

1. openssl库文件及头文件的获取获取openssl库文件及头文件有两种方式:1)下载OpenSSL源代码并由自己编译后使用2)下载已编译好的安装包,安装后直接可以得到openssl的库文件及头文件使用第一种方法获取,过程十分繁琐,同时编译过程中可能产生各种各种的问题,因此这里使用第二种方法获取openssl库文件及头文件。下载安装包(https://slproweb.c...

2019-09-05 14:15:38 7804 3

原创 C++基本数据类型、结构体、类、联合内存占用(三)——联合

定义及规则当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员;4)其对齐方式要适合其中所有的成员;验证程序#inc...

2019-09-01 18:53:33 239

原创 C++基本数据类型、结构体、类、联合内存占用(二)——结构体、类

C++类和结构体内存占用方式相同类的内存占用规则(1)空类大小为1,因为C++标准规定空类也可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址;(2)类的大小为非静态成员数据的类型大小之和,静态成员存放在全局数据段,不影响类实例化的大小;(3)类本身的一些特性占用的大小,虚函数表...

2019-08-30 15:19:39 288

原创 C++基本数据类型、结构体、类、联合内存占用(一)——基本数据类型

基本数据类型VS下基本数据类型占用内存如下表PS:很多书籍及博客介绍,64位编译环境long占8个字节,这个介绍太过于笼统。基本数据类型占用的内存和编译器有关(要看编译器厂商如何实现)。long在VS、64位编译环境下占用4个字节。基本数据类型 数据类型 x86占用内存(单位:字节) x64占用内存(单位:字节) char 1 1 short 2...

2019-08-21 19:23:43 249

原创 常成员函数——const修饰符修饰的成员函数(函数后面加const)

常成员函数,是指由const修饰符修饰的成员函数,在常成员函数中不得修改类中的任何数据成员的值。常成员函数表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用),唯一的例外是对于mutable修饰的成员。常成员函数示例class CTest2{public: int GetVa...

2019-07-31 17:10:57 1293

原创 vs在调试过程中修改变量的值

在linux下使用gdb调试程序的时候,可以使用“set variable key = value”或者“print key=value”命令修改调试过程中变量的值,方便我们灵活调试程序。在vs开发环境下,也可以在调试过程中修改变量的值。方法如下在VS能够单步调试,查看到变量的值的前提下,打开局部变量窗口,如下修改局部变量窗口中,变量的值,如下最终程序运行结果,如下...

2019-07-24 18:56:19 10536

原创 Visual Studio——使用多字节字符集与使用Unicode字符集

vs配置选项“使用多字节字符集”和“使用Unicode字符集”的区别VS集成开发环境,字符集选择“使用多字节字符集”和“使用Unicode字符集”的直接区别就是:编译器是否增加了宏定义——UNICODE。当选择“使用Unicode字符集”时,编译器会增加宏定义——UNICODE;而选择“使用多字节字符集”时,编译器则不会增加宏定义——UNICODE。而是否增加了宏定义UNICODE,则...

2019-07-23 19:58:42 19390 3

原创 设计模式(C++实现)(十七)——原型模式

示例问题:实现一个类的时候,通常会重载运算符“=”,然后可以将同一个类的对象用“=”赋值给另外一个对象。这实际上这就是原型模式的一种应用了(原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。)下面就阐述下重载运算符“=”(使用原型模式)带来的好处。未重载运算符“=”(未使用原型模式):UnProtoType.h#pragma once#include ...

2019-06-26 13:35:57 297

原创 设计模式(C++实现)(七)——迭代器模式

示例问题STL的里面迭代器已经实现了vector、list、map等容易的迭代访问。同样的问题,一个聚集类对象,顺序的去访问其中的各个元素,而又不暴露该对象的内部表示,就是迭代器模式了。用下面的这个示例来体会下迭代器模式的思想。分析无解决方案Iterator.h#include <iostream>#include <vector>#inclu...

2019-06-25 20:44:25 285

原创 设计模式(C++实现)(二十)——命令模式

示例问题:在软件开发这个行业,有一个重要的职位——项目经理,这个人对内负责项目及项目团队的管理,对外负责和产品经理、领导等的沟通。项目经理对外沟通获得所有的需求,记录需求内容,撤销需求(当产品经理或者领导觉得某条需求不妥时),当需求整理到可以做产品的时候,会将任务分配给程序员去开发。编程描述上面问题。分析:如果没有项目经理这个职位,让程序员直接和产品经理、领导沟通,并负责项目的管理,可...

2019-06-25 20:13:23 388

原创 设计模式(C++实现)(九)——状态模式

示例问题:篮球运动员在比赛的时候,会因为体力、情绪等影响竞技状态。比如,刚上场的时候,体力充沛、动作灵活、投篮神准;打了8分钟过后,身体疲惫、动作变慢;下场休息3分钟并喝了一瓶红牛过后,体力恢复、恢复了运动能力和投篮手感;最后决胜3分钟,比分犬牙交错,肌肉紧张、身体匹配、精神兴奋。编写程序,描述各个状态下,运动员的情况。分析:如果创建一个篮球运动员类,在该类中实现一个展示运动员情况的函...

2019-06-25 00:16:24 314

原创 设计模式(C++实现)(二十三)——享元模式

示例问题:一个制造杯子的厂商,主要生产大、中、小圆柱形杯子(这3种规格的杯子上印有各种各样的文字),以及特殊造型杯子1,特殊造型杯子2。现需要定制模具来生产杯子,用代码解决该问题。分析:由于大、中、小圆柱形杯子上印有成千上万种文字,不可能为印有每一种文字的杯子都制造一个模具。只有制造好了大、中、小杯子的模具,之后能够灵活在上面印刷文字,才是上上策。解决方案:Flyweight....

2019-06-24 16:14:53 288

原创 设计模式(C++实现)(二十二)——中介者模式

示例问题:windows的消息机制,对于在Windows下做开发的人员来说,可以说是必备的知识。即键盘、鼠标、应用程序、应用程序窗口之前的消息通信,均通过Windows操作系统的消息队列、消息循环等完成,编写示例程序,描述应用程序窗口之间通过Windows操作系统完成相互通讯的过程。分析:若没有Windows操作系统提供的消息队列、消息循环等实现应用程序或应用程序窗口之间的通讯,而是由...

2019-06-22 22:05:46 341

空空如也

空空如也

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

TA关注的人

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