- 博客(62)
- 资源 (1)
- 收藏
- 关注
原创 C++设计模式学习-模板方法模式
一个抽象的类公开的定义了一个方法的模板。它的子类可以根据需要来重写这个方法,但调用将以抽象类中定义的方式进行。这是一种代码复用技术,他提取了类库中的公共行为,将公共行为放到父类中,然后其子类来实现各自不同的行为。可以实现一种反向的控制,通过子类覆盖父类的函数,从而来防止某一步的执行。父类形式化的定义一个算法,然后具体的实现的方法由子类来实现。符合单一职责原则和开闭原则。
2022-12-18 15:29:54
167
原创 C++设计模式学习-外观模式
外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。封装的内容可以是相互之间毫无关联的东西,但是是一个共同的功能下的。
2022-12-18 14:59:38
124
原创 C++设计模式学习-观察者模式
用于建立一种对象与对象之前的依赖关系, 一个对象发生改变的时候将自动通知其他的对象,其他对象将相应做出反应。发生改变的对象称为观察目标, 被通知的对象称为观察者。
2022-12-04 20:49:13
245
原创 C++设计模式学习-代理模式
提供一种代理来控制对其他对象的访问通过一个抽象类提供的一套相同的接口然后通过封装的方式,来实现通过对代理的访问来间接地访问真正的类。
2022-12-04 20:19:05
485
原创 C++设计模式学习-单例模式
单例模式只有一个实例, 并提供一个访问他的全局访问点实现单例的步骤构造函数私有化增加静态私有的当前类的指针变量提供一个静态的对外接口, 可以让用户获得单例对象单例分为懒汉式和饿汉式单例对象释放的问题可以在对象中新建一个静态的 垃圾桶 ,通过 垃圾桶 的析构函数来释放单例对象多此一举!!!!因为当要销毁单例对象的时候,程序即将销毁,而当程序销毁的时候,单例对象自然会被销毁,所以无需手动销毁!!!!代码演示单例模式遇到多线程懒汉式是线程不安全的(可能同时new很多个对象)饿汉式是线程安全的(对
2022-12-04 20:18:14
122
原创 C++设计模式学习-抽象工厂模式
抽象工厂针对的是产品族,而不是产品的等级结构产品族:同一产地或同一厂商,功能不同产品等级:功能相同,产地或者厂商不同代码
2022-12-04 16:47:56
212
原创 C++设计模式学习-工厂方法模式
将一个大的工厂抽象出来,然后每一个类都有一个对应的具体的工厂缺点:类的个数成倍增加(增加一个类,就要增加一个对应的工厂),从而导致类越来越多,增加了维护的成本增加了系统的抽象性和理解难度好处:符合开闭原则实现了对象创建和使用的分离系统的可扩展性变得很好,无需修改接口和原类使用场景:客户端不知道他所需要的对象的类抽象工厂类通过其子类来指定创建哪个对象代码
2022-12-04 16:17:53
268
原创 C++设计模式学习-简单工厂模式介绍
通过一个工厂来创建要创建的类好处:客户端和具体实现类解耦对于某些对象创建过程比较复杂的情况,我们也可以不去考虑(无需关心创建的过程)不好:简单工厂模式,增加新的功能是通过修改代码来实现的,不符合开闭原则类的职责过重,若这个类发生问题,会影响很多使用这个工厂的模块适用场景:工厂类负责的对象比较少客户端只知道传入工厂类的参数,对于如何创建对象不关心案例代码
2022-12-04 15:54:03
179
原创 C++设计模式学习-面向对象设计原则
核心的问题:如何同时提高一个软件系统的可维护性和可复用性原则的目的:高内聚,低耦合单一职责原则类的职责单一,对外只提供一种功能,而引起类变化的原因应该只有一个开闭原则类的改动是通过增进代码进行的,而不是修改原代码里氏代换原则任何抽象类出现的地方都可以用他的实现类进行替换(多态)依赖倒转原则依赖于抽象,不要依赖与具体的实现,对接口编程传统设计:优化的设计:接口隔离原则一个接口只提供一种对外的功能合成复用原则对于继承和组合,优先使用组合(即作为一个参数或者是一个内部成员)迪米特原则(又叫最少知识原则)
2022-12-04 15:07:39
134
原创 Qt 继承QApplication封装单例应用程序类
该类重写可以防止应用程序重开,也可以实现一些特殊的需求比如Qt 在一个exe打开的情况下再次双击这个exe使得原来的exe窗口全屏。
2022-09-20 10:46:53
515
原创 C++ 实现类的成员函数绑定回调
一般来讲用于绑定回调的函数是地址已确定的类似全局函数或者类的成员静态函数等,如果有特定的需求比如必须要绑定类的普通成员函数,就需要使用特别的方法,在这里推荐c++库所支持的使用一种模板函数指针funtion和bind结合使用的方法。...
2022-07-28 10:01:28
660
原创 QPushButton绑定快捷键的注意事项
在一个日常开发当中,需要为按钮添加一个快捷键操作,指定键盘上的一个按键按下相当于用鼠标点击了这个按钮,这就是快捷键的作用有个现象是当添加快捷键的顺序是这样的话,快捷键无效先进行快捷键的绑定,再进行按钮文本的设置,无效先进行文本的设置,再进行快捷键的绑定,有效然后我再试了一下将设置文本的代码注释掉,再绑定快捷键,运行程序,按下回车,我靠,程序崩溃了以上就是我在一个日常开发中发现的一个小细节,不清楚是不是我版本Qt5.7.1太低的原因,目前没有去试试高版本的Qt是否存在同样的现象,欢迎有心人留言探讨!
2022-07-02 09:29:42
1093
1
原创 QLabel 跑马灯文字显示
整个功能的实现是在前人的基础上进行了优化和修改有一个比较重要的点是:当windows系统设置文本显示比例不是100%的时候,这里设置字体大小号数并不意味着文字的像素大小就是这个号数重点是这3个函数:源程序呈上头文件:cpp文件:#include “scrolllabel.h”............
2022-07-01 15:47:03
990
原创 goto语句跳转未初始化变量:C2362
源报错代码:编译器会报错:C2362 goto _exit跳过了_exit初始状态解决方法:解决办法就是将jo变量的声明提前到程序开始
2022-06-30 09:27:24
1586
原创 多对象共用槽函数方法
在一个比较大型的项目当中,免不了大量的信号与槽的使用,因此这里就引发了一个思考如何去管理这些大量相似的关系呢?比如存在1000个按钮都需要绑定按钮点击触发到一个槽函数,肯定这1000个按钮对应的槽函数业务逻辑都会不一样,我们是一个一个的绑定吗?显然这样做会耗费大量的时间写类似的代码方法一 : 每个按钮关联到一个独立的槽,虽然是可以这样做的,但是这样以来,会写多少的代码,代码量大不可取放弃方法二: 所有信号发送者即按钮都绑定到同一个槽函数,在槽函数中使用sender()进行区分方法二:使用信号转发类方法四
2022-06-15 18:25:42
707
原创 漂亮的Material样式对话框
在实际项目开发中,对于漂亮美观的UI界面大多数都是采用样式表来实现的,但是实际上即使是样式表很少也能实现比较带科技炫酷的风格,本篇介绍的是模仿谷歌Material风格的UI界面,基于大牛的第三方开源控件库,界面效果大致如下我对接口进行了封装,关键代码献上:头文件:cpp文件:两个关键函数,初始化窗口函数以及显示窗口函数...
2022-06-15 11:38:42
711
3
原创 QT5 控件的文字显示不完全解决办法
参考文章连接界面设计中控件的文字显示不完全解决方案在我们实际项目中可能文字内容是动态变化的,如果当文字内容较长时,而控件的尺寸时固定的,此时就会出现文字显示不全的情况解决办法:就是在main.cpp添加下面代码,特别的必须在构造 Q(Gui)Application 之前设置此属性。可以查阅Qt帮助手册查阅其含义用法示例:...
2022-06-14 10:57:16
3064
原创 VS2019 生成.i预编译中间文件方法
说明:在编译c++程序的时候通常会遇到晦涩难懂的宏指令, 在预处理阶段生成的.i文件中这些宏会被替换展开, 在此时观察就容量的多.如下步骤操作:1.右击所要配置的工程属性2.选择c/c++预处理器按照截图如下配置3.重新编译即可生成.i后缀名的中间文件打开即可观察学习4.警告:当更改配置文件的时候可能会提示编译错误,但这个时候.i的编译文件已经产生可以观看了,因此配置再改回来即可....
2022-04-24 16:27:01
1411
原创 Visual studio2019 安装Qt扩展插件不成功
今日解决了一个一直没有解决的问题,就是我的Visual studio2019在扩张中心下载Qt插件,下载安装成功后打开Visual studio2019提示未能正确加载VSIX包,我又是关闭防火墙 UAC 都通通失败了,直到看到一篇博文介绍说更新我的Visual studio2019 到最新就可以,一试试果然成功了,666,下面放上参考博文链接:https://blog.youkuaiyun.com/guanguanboy/article/details/104781616...
2022-03-29 15:49:13
2844
原创 paintEvent画圆角窗体
这里不使用样式表的方式,而是使用在paintEvent里面的方式// 绘制圆角窗体 { QPainterPath painterPathPath; QRectF rect = QRectF(0, 0, this->width(), this->height()); painterPathPath.addRoundRect(rect, BORDER_X_RADIUS, BORDER_X_RADIUS); QPolygon p
2022-03-22 20:35:37
380
原创 如何将字符串分支用于switch-case
switch-case语法中规定 case是不能用字符串来进行case分支的 ,有时候可能项目中会有相关的需求//common.h#include <stdint.h>using namespace std;namespace common{ constexpr uint32_t strToHash(const char* str); uint32_t add(uint32_t a, uint32_t b);};constexpr uint32_t common::strToH
2022-02-15 17:30:19
1108
原创 Qt MSVC2015编译程序时报错:error: LNK1158: 无法运行“rc.exe”
Qt在debug模式下编译程序时报错:error: LNK1158: 无法运行“rc.exe”系统环境:Win10 64位,Qt_5_11_1_MSVC2015_32bit解决方法:找到rc.exe的放置路径,比如C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64然后添加到环境变量PATH中,重启Qt即可!...
2022-02-14 22:58:53
812
原创 二叉树遍历(递归方式)
孩子表示法:typedef struct treeNode { char data; struct treeNode * lChild; struct treeNode * rChild;}treeNode,* pTreeNode;创建一个树节点pTreeNode createTreeNode(char data){ pTreeNode p = new treeNode; p->data = data; p->lChild = nul.
2022-02-13 15:13:09
187
原创 如何判断平台字节序的大小端?
1.利用联合体所有成员起始位置一致bool isLittleEndian(){ union isLittle_Endian { int i; char c; }; isLittle_Endian check; check.i = 1; return check.c == 1;} O "是小端模式吗? " << isLittleEndian();1.利用强制类型转换bool isLittleEndia
2022-02-09 20:27:00
378
原创 QtCreator配置CDB调试器后调试代码查看变量值显示卡
开始我在用cdb调试器调试特别简单的代码查看变量值显示结果处理贼慢,百度查询解决办法尝试调试器切换x86和64切换后,调试速度变得正常了,不知道这尼玛是什么神学作祟
2022-02-09 17:10:10
784
原创 Qt WMIC命令获取一些硬件信息
WMIC常用大量的命令可以百度查询/* * 获取cpu名称: wmic cpu get Name * 获取cpu核心数: wmic cpu get NumberOfCores * 获取cpu线程数: wmic cpu get NumberOfLogicalProcessors * 获取cpu序列号: wmic cpu get processorid * 查询主板序列号: wmic baseboard get serialnunber * 查询bios序列号: wmic
2022-02-09 16:51:25
860
1
原创 Qt常用宏定义
本文章主要积累一些常用宏 定义,有些定义在头文件QtGlobal中QT_VERSION ,QT_VERSION_CHECK//主要用于条件编译设置,根据Qt版本不同编译不同的代码//我这里用的Q他版本是5.7.1,因此软件走的分支是cc = 10000示例代码:#if QT_VERSION >= QT_VERSION_CHECK(5,7,2) int cc = 0;#else int cc = 10000;#endifQT_VERSION_STRqDeb
2022-02-09 11:17:50
4449
原创 C++的链式编程思想
例子:class A{public: A(int val = 1):a(val){} A addA(const A &obj) { this->a = this->a + obj.a; return *this; } int a;};int main(int argc, char *argv[]){ QApplication a(argc, argv); A classA(10);
2022-01-13 22:01:25
696
原创 Qt 生成随机数 QRandomGenerator
调用静态函数获取一个对象[static] QRandomGenerator *QRandomGenerator::global()调用对象QRandomGenerator的成员函数生成随机数:int bounded(int highest) //随机数范围0-highest,不包含highest,返回值是结果int bounded(int lowest,int highest) //lowest-highest,不包含highest...
2022-01-02 14:38:56
1347
原创 信号槽宏 SIGNAL和SLOT的本质
阅读源码可以看到:#define SIGNAL(a) “1”#a#define SLOT(a) “2”#a实际上就是一个常量字符串,Qt在connect中的信号和槽参数实质就是const char *看下下面这个代码:void KeyButton::onReponse(const QObject * receiverObj,const QString &recever){connect(this,SIGNAL(pressed(int,QString)),receiver
2021-12-29 14:32:06
661
原创 QString转const char*
QString str(“hello world!”);转成const char *const char * arr = str.toStdString.c_str();const char * arr = str.toLatin1().constData(); //toUtf8()转成 char *3. char * arr = str.toStdString.data();4. char * arr = str.toLatin1().data(); //toUtf8()...
2021-12-29 12:01:22
5472
3
原创 关于恋爱的一些感受,写一写,抒发一下自己的情绪
事情已过些日子,心情跌落到谷底,就像这深圳的天气,许久没下雨的深圳在这个我极度低落的时候下下起了经久不息的雨。 事情是这样的,国庆期间翻开淘宝偶然发现了居然还有对方的联系方式抱着试试的心态尝试着联系(因为自从分开以后,所有能想到的联系方式已全部删除),真的十分出乎意料的收到了对方的消息,但是另外更加震惊和悲伤的消息是她结婚了,第一次感觉到好像这种电视剧里面的桥段发生在我的身上,是那么的真实和痛苦。不可否认,我也不能欺骗自己的是,即使分开这大半年的时间,她在我的心里从未丢失过。和她上次见面是在年...
2021-10-14 14:23:34
102
原创 虚拟机上的ubuntu设置自定义分辨率
背景:一般系统设置中显示功能选项进去会给出系统自带支持的一系列分辨率,如果其中没有适配当前显示器的分辨率,我们可以通过自定义分辨率来选择使用合适的分辨率1.查看显示器名称以及支持的分辨率输入: $xrandr可以看出我的显示器的名称是Virtual12.打开shell终端:输入:cvt 1920 10803. 设置分辨率输入:sudo xrandr --newmode “1920x1080_60.00” 173.00 1920 2048 2248 2576 1080 1083 1088
2021-08-24 09:22:06
4597
原创 Qt信号槽告警QObject::connnect:Cannot connect(null)
很简单的在构造函数绑定一个信号与槽的连接,m_pTimer 是一个指针成员变量,编译报错:QObject::connnect:Cannot connect(null);网上百度找了很久才发现原来指针m_pTimer没有初始化0.0 很明显很low的一个疏忽,哈哈connect(m_pTimer, SIGNAL(timeout()), this, SLOT(setStop()));...
2021-07-27 14:35:17
3692
原创 QDebug小细节
1.不引用QDebug头文件使用qDebug()qDebug(const char *message, …)e.g:qDebug("%s", "hello world!");2.屏蔽qDebug打印项目文件(.pro)添加DEFINES+= QT_NO_DEBUG_OUTPUT
2021-07-16 08:53:40
181
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人