自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 QT的TCP连接功能概述

QT 的TCP自带函数库,使用起来和WinSock差不多。

2022-11-24 16:40:17 3375 1

原创 何为智能指针以及QT中的智能指针

*强指针和弱指针:**以上问题引出了强指针和弱指针的概念。**环形引用问题:**但是若对象A与对象B相互引用,想要删除这两个对象时会出现问题,删除A的时候发现被B引用无法删除,删除B的时候发现被A引用无法删除。**目的:**对于指针的使用中有两个导致软件崩溃的问题,一是忘记释放动态申请的内存,二是指针指向的内存被释放,为了解决这个问题,出现了智能指针。特性:强指针,引用计数型的智能指针,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除指向的对象。

2022-11-22 13:54:33 624

原创 友元函数与友元类

一个类需要调用另一个类的时候,我们经常会使用友元类和友元函数。

2022-11-15 15:51:29 234

原创 头文件相互包含问题

主要问题就是Computer里包含了Keyboard类的对象,而Keyboard类中又包含有一个Computer指针(因为Keyboard类中的BtnSleep方法要使用到Computer类中的某些功能),所以两个头文件直接相互包含,而相互包含是编译器所不允许的。为了解决这个问题,我们引出了前向声明这个概念

2022-11-15 15:27:18 793

原创 JSON结构示例

【代码】JSON结构示例。

2022-08-22 14:03:13 1383

原创 QT跨线程信号槽无响应的原因解析

信号槽无法触发的原因,无非就就下面几种:1.忘记连接信号槽,这种错误十分低级,排查难度一颗星;2.信号槽中使用了自定义参数(此处应该注意自定义参数是包括数组的,本人在此处吃过一次亏,浪费了半天时间排查),但是没有注册过,应该在开头使用qRegisterMetaType<Mytype>("Mytype");注册,排查难度两颗星;3.实际槽运行的线程资源被占用,或者是槽所在的对象正在其他的槽响应过程中,这个问题需要带调试排查,排查难度三颗星。第3点在线程架构设计的时候就需要考虑到这个问题,尽

2021-10-09 16:53:30 5343 3

原创 QT中线程新建方式的区别以及实际使用建议

QT多线程使用方式中常用的是方式一:继承QThread,重写run函数,使用start函数开始;方式二:继承QObject,新建QThread对象thread,使用QObject的moveToThread函数将QObject运行在thread中,使用start函数开始。区别是什么?跨线程使用信号槽时,根据线程使用方式和信号槽连接方式的不同,实际槽所运行的位置也不一样,结论如下:使用方式一,实际此线程的槽函数根据连接时所选择的连接方式1.QueueConnection方式 运行在创建此QThrea

2021-10-09 16:41:03 1457 1

原创 从关注公众号讲到观察者模式

观察者模式类似于公众号推送,你接收到推送的前提是你关注了公众号,关注完成后公众号就得到了你的联系方式(和你在网站注册完老是给你发垃圾短信一个道理),你关注了以后就给你发各种推送,而且是点对点发送,群发,肆无忌惮的发,想要停止接收只能是取消关注。接下来就有请受害者://观察者类class Observer{public: virtual void Update(int) = 0;};//观察者1class TureObserver1 :public Observer{public:

2020-11-30 16:47:33 228

原创 什么时候需要初始化列表?

在刚接触QT的时候我们都会看到自动生成的主界面构造函数如下:MainWidget::MainWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MainWidget){}这边使用的就是初始化列表,初始化列表主要用于以下几种情况:第一种:类B中包含另一个类A的对象a,但是类A的构造函数含有参数例如A(int x),那么当类B初始化时,若没有初始化列表,无法正常初始化B,正确做法是将B的构造函数写为B():a(x)。代码如

2020-11-27 13:55:35 1758 1

原创 多线程编程中用到的几种锁

由于多线程可能同时操作同一块内存的需求出现,多线程编程中出现了临界区这个概念。为了解决这个访问冲突的问题,各种锁应运而生,锁如果以等待线程的运行方式分主要分为自旋锁和互斥锁两类:自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待(不会睡眠),然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。自旋锁是非阻塞锁,一直占用CPU,他...

2019-08-19 11:05:16 2549

原创 指针p++,*p++,(*p)++,*(p++)的区别

p是一个指针,p++,*p++,(*p)++,*(p++)这四个加到底是加在地址上还是加在值上呢?直接上测试代码我们看:int buf1[5] = { 0, 2, 4, 6, 8 };int buf2[5] = { 0, 2, 4, 6, 8 };int buf3[5] = { 0, 2, 4, 6, 8 };int buf4[5] = { 0, 2, 4, 6, 8 };int *p1...

2019-06-17 10:17:30 6300

原创 实时系统与非实时系统

实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分:硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的,适用于对实时性要求特别高的场合,如工业过程控制、汽车安全控制系统、武器控制系统;软实时按照任务的优先级来响应事件,尽可能快地完成操作即可,并没有任务完成限时。适用于按照统计学来说任务都会在限定时间内完成,但是如果没有完成也没有特别严重后...

2019-03-24 16:36:49 1577

原创 不同需求下使用的QT数据结构(同STL)

1.需要让键值对按照插入顺序排列,不需要频繁读取或只需要头尾读取,需要频繁不定位置插入:QList<QPair<QString,QString>>2.需要让键值对按照插入顺序排列,需要频繁读取, 不需要频繁不定位置插入或只需要在头尾插入:QVector<QPair<QString,QString>>3.需要让键值对自动排序,速度要求快:QMap...

2019-03-20 15:38:54 498 1

原创 QT中菜单和工具栏的使用

如下图是一个工具栏和菜单栏的简单示意,“文件”“帮助”所在的地方称作菜单栏,“囧”所在的地方称作工具栏,那么在QT中怎么实现他们呢?打开QT Designer可以看到编译器已经给我们提供了一个框架,在窗口标题的下面有一个"在这里输入"提示,双击它输入一个名字就可以得到一个新的菜单项:创建完菜单项以后,我们需要添加菜单下面的子项,这个时候就需要用到一个QT的一个功能叫action,对于他的更...

2019-03-16 16:33:54 3797 4

原创 父类指针指向子类对象问题

子类与父类指针调用相关注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)3,如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调用成...

2019-03-15 10:06:58 643

转载 继承中的二义性问题

一、调用不同基类的同名成员时可能出现二义性class A{ public: void setA(int a); int get(); private: int a;} ;class B{ public: void setB(int b); int get(); private:...

2019-03-15 09:42:33 1886

原创 回调函数的意义

一个工程需要甲乙两个人一起完成:甲方:正常工作需要ABC三个模块,A、C模块我都有,我需要一个B,而且我对B是有要求的;乙方:我正好有B,你看行不行,你需要的时候我把B模块的密钥告诉你。上文中的B就是回调函数,甲方规定了回调函数的格式,乙方负责根据格式和项目要求去送给甲方不同的B(回调函数),通常乙方都会通过将自己所拥有的B的密钥送给甲来实现(即函数指针)。为什么要使用这样一个机制呢?可能...

2019-03-07 00:27:52 1652

原创 QT中子线程与主线程通讯的方法

子线程可以通过信号量与槽来传递数据给主线程,让主线程更新,下面是一个最简单的例子,界面中只有一个label,主线程中通过movetothread的方法创建了一个子线程,然后子线程中不断触发showNum信号让主线程调用DisplayMsg来更新label。头文件:class MainWindow : public QMainWindow{ Q_OBJECTpublic: ...

2019-03-06 18:51:01 8712 6

原创 QT中新建线程的几种方法

QT新建线程的几种方法:1.继承Qthread新建一个类,重写run方法,此方法除run之外,其他的都还是在主线程中运行;2.使用moveToThread将新建线程转移到继承QObject的新类实例中;方法1:1.新建一个类WorkThread,基类为QThread。2.重写类WorkThread的虚函数void run();,即新建一个函数protected void run(),然后...

2019-03-06 17:16:20 22160

原创 拷贝构造函数与深浅拷贝以及赋值表达式的关系

在C++中,下面三种对象需要拷贝的情况。因此,拷贝构造函数将会被调用。1). 一个对象以值传递的方式传入函数体2). 一个对象以值传递的方式从函数返回3). 一个对象需要通过另外一个对象进行初始化搜索拷贝构造函数与赋值运算的行为相似,用一个已存在的对象去构造一个不存在的对象(构造之前不存在),就是拷贝构造。用一个已存在的对象去覆盖另一个已存在的对象,就是赋值运算,见如下例子。using ...

2019-03-03 15:37:56 296

原创 STL之map

map 是一种有序无重复的关联容器。关联容器与顺序容器不同,他们的元素是按照关键字来保存和访问的,而顺序元素是按照它们在容器中的位置保存和访问的。map保存的是一种 key - value 的pair对象,其中 key 是关键字,value 是关键字对应的值。通过 key找到对应的 value。map中按照 key的大小升序排列pair对象。根据key值快速查找记录,查找的复杂度基本是Log(...

2019-02-23 16:52:10 472

原创 STL之deque

连续存储结构,即其每个元素在内存上也是连续的,类似于vector, 不同之处在于,deque提供了两级数组结构, 第一级完全类似于vector,代表实际容器;另一级维护容器的首位地址。这样,deque除了具有vector的所有功能外,还支持高效的首/尾端插入/删除操作。deque是在功能上合并了vector和list。头文件:#include&lt;deque&gt;创建及初始化:d...

2019-02-22 13:35:20 115

原创 STL之list

与vector不同,list是非连续存储结构,具有双链表结构,每个元素维护一对前向和后向指针,因此支持前向/后向遍历。支持高效的随机插入/删除操作,但随机访问效率低下,且由于需要额外维护指针,开销也比较大。每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。头文件:#inclu...

2019-02-22 11:46:00 233

原创 STL之vector

vector(向量):是一种顺序容器,采用的连续存储空间来存储元素,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。头文件为:#include &lt;vector&gt;声明及初始化:vector&lt;int&gt; v...

2019-02-22 11:06:29 108

原创 STL之初识STL

STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。主要包含algorithm(算法)、container(容器)和iterator(迭代器)三部分,几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:&lt;algorithm&gt;...

2019-02-22 10:24:53 226

原创 数据结构:线性表

一、线性表的定义线性表是零个或者多个数据元素的有限序列。1.元素之间存在顺序,除头和尾以外的元素都有且只有一个前驱和后驱;2.元素是有限的。二、线性表的顺序结构线性表的顺序结构指的是用一段地址连续的储存单元依次存储线性表的数据元素。三个属性:1.储存空间的起始位置;2.线性表的最大存储容量;3.线性表的当前长度。如下图这个数组:插入操作:在线性表的第i个位置上插入新元素E,...

2019-02-03 16:37:13 272

原创 数据结构:树

以下内容来源于《大话数据结构》一书一、树树是n(n&amp;amp;gt;=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n&amp;amp;gt;1时,其余节点可分为m(m&amp;amp;gt;0)个互不相交的有限集,其中每一个集合本身又是一颗树,并且称为根的子树(SubTree)。下图就是一棵树:B以及B所有的分支,C以及C所有的分支都是根节点A的子树,D以及...

2019-01-25 14:17:01 350

原创 迭代与递归

迭代与递归其实有相似之处,以从累加为例。迭代:重复执行相同步骤多少次(已知次数)以后停止int sum(int n){ if(n&gt;1){ for(i=1;i&lt;n;i++) { n=n+i; } }else{ return 1; }}递归:重复嵌套执行自身(未知次数)直到符合条件以后停止,并将结果层层返回处理输出最终结果int sum(int...

2019-01-23 16:19:49 241

原创 C#窗口的更新过程解析

首先介绍一下窗口过程的回调函数(WndProc):应用程序的消息来自于系统消息队列,被应用程序的主程序中的消息循环所处理。这个消息循环从应用程序的消息队列中取出消息,进行预处理,然后派发到消息对应的窗口过程,窗口过程在被调用后根据消息的类型进行相应的处理(回调函数)。它带有四个参数,分别为:窗口句柄(Window Handle) HWND,消息ID(Message ID) UINT,和两个...

2019-01-17 16:52:26 1218

原创 C#中新建用户控件示例

C#工具箱中已经自带了一些基础控件,对于要求不高的项目来说已经可以满足需求,如果觉得自带控件不好用的可以使用第三方的控件库,这个收费和免费的都有很多,如果这些还满足不了自己的个性化需求的就只能自己写了,基本上自己写的控件库根据自定义的程度不同可以分为三档:第一档:复合控件这类控件只是为了解决某一些重复出现的控件组合的需求而编写的,比如TrackBar和label组合显示的复合控件,这类控件从U...

2019-01-16 16:44:22 8964 1

原创 C#中ListView详解

ListView是一个Windows 列表视图控件,该控件显示可用五种不同视图之一显示项的集合

2019-01-15 11:35:20 17764

原创 C#中Imagelist详解

借由编译器自动生成的代码和动态创建的代码来说一说Imagelist控件的使用:首先拖入一个imagelist控件,其将在窗口下面分栏显示:接着插入一些图片:编译后,我们会发现资源管理器中出现了一个后缀为resx的文件:度娘一下得到了如下解释:托管资源, 非代码类的, 图片, 图标, 文件等等, 可以编译进最终的程序集中,运行时可以用 ResourceManager 来加载使用,...

2019-01-14 14:47:48 29704 2

原创 ”线程间操作无效: 从不是创建控件“XXX”的线程访问它“的解决方法

出现这种错误的时候,说明你正在试图跨线程更新界面,而这是winform所不允许的,所以采用代理的方式来更新界面吧,下面是出错的代码: private void timersTimer_Elapsed(object sender,usTimerEventArgs e)//这是一个定时达到后的执行函数 { string text = “报错”;...

2019-01-12 11:21:14 2502 2

原创 C#实现微秒级计时器

利用windows自带的高精确度性能计数器来计算时间(微秒级),虽说需要硬件支持,大部分的cpu都是支持的,感觉在pc上可以忽略这个要求。自己写了一个类(传送门在文尾),调用这个类的方法和调用C#自带的System.Timers中的定时器差不多,但是考虑到当定时器用确实不太准,所以改成了计时器,下面演示示例用法:有这样一个场景,我需要得到一个相机单次触发的获取图像时间,首先先实例化一个对象p...

2019-01-12 10:22:50 6405

原创 继承相关关键字Virtual、Abstract、override、Interface、final、Sealed全解析

因为需要经常切换C++/C#平台编程,一次性解析下这些关键字吧,写多了容易混。。。首先呢这些关键字不是两个平台都有的,具体如下:VirtualAbstractoverridefinalInterfaceSealedC#√√√×√√C++√×√√××**Virtual与override、final、Sealed **C#:1....

2019-01-09 17:12:00 504

原创 何为接口、为什么使用接口、接口的C++与C#实现(顺带提一下C++中的override与final保留字)

何为接口:接口为一个特殊的类,其中只包含有方法、属性、索引器和事件的声明,但并没有其实现,若一个类实现了某个接口,则必须在类中包含接口中所有方法的实现代码。为什么使用接口:有看官可能要问了,这玩意只是声明了一下有啥用,我为什么不直接用类?那么,举一个例子(C#代码):现在有一个类名为car,car中包含了一个Weight方法打印最大速度:class car { public v...

2019-01-09 14:10:20 636

原创 C#与C++遍历一维数组二维数组的几种方法

C#中一维数组与二维数组遍历方式: string[] arr =new string[4] { "first", "second", "third", "fourth" }; string[,] arr2 = { { "first", "second" }, { "third", "fourth" } };

2019-01-07 16:46:49 2264

原创 SqlHelper类中的ExecuteNonQuery方法解析

在SqlHelper类(windows原)中,ExecuteNonQuery方法有八个重载,接下来我们来一一解析。第一个方法,在数据库连接对象(connection),命令类型(commandType),命令行文(commandText),SqlParameter参数数组(params SqlParameter[])都存在的情况下,我们使用这个方法。 public sta...

2019-01-07 13:42:29 5733

原创 C# 第一次使用SQL数据库的过程记录(C#部分)

SQL部分完成以后,我们开始配置C#部分,想要在C#中操作数据库,我们需要使用一个工具类,名为SqlHelper,这个类中包含了操作数据库的一些方法,微软出品。另外我看网上也有各路大神有重写这个类,此处我用的是微软的版本。此处附上:链接:https://pan.baidu.com/s/1tVGpuVta7-CtSX6SWd0GNA提取码:v7bv首先建一个C#的用户界面,随便拖入一个按钮:...

2019-01-05 16:50:54 324

原创 C# 第一次使用SQL数据库的过程记录(SQL部分)

以前从不用数据库,基本客户那边的数据用excel能满足,闲下来还是得看看数据库,用的是微软爸爸的Sql Server2017,一步一步来吧。首先是Sql Server,首先下载好Sql Server2017,这里直接提供传送门吧:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads鉴于不清楚这几个的区别,我下载了开发...

2019-01-05 16:22:40 559

C#微秒级计时器

实现了微秒级计时器,提供一个类,风格和C#自带的定时器差不多,误差应该在1ms以内,这玩意想要真正十分精确还是得用硬件计时器才行.

2019-01-12

PrintSpooler打印信息监控

这是一个外国社区的一个三哥的代码,经过修改以后分享给大家,基本实现了监控本地打印机的打印状态,加入了本人的详细注释,十分好理解,包含了一些C++ dll调用,回调函数,线程同步等基本操作,作为初学者的例子也不错,欢迎下载。

2018-12-11

空空如也

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

TA关注的人

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