自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

明月清风@的博客

日升月落,终现黎明

  • 博客(80)
  • 收藏
  • 关注

原创 C# 深入理解事件(event)机制

事件作为类的成员,一般是通过事件向其他类或对象通知发生的相关事情。发送事件的类称为发布者,接收事件的类称为订阅者。发布者确定何时引发事件;订阅者确定对事件作出何种响应一个事件可以有多个订阅者。订阅者可以处理来自多个发行者的多个事件。没有订阅者的事件永远也不会引发。事件通常用于表示用户操作,例如单击按钮或图形用户界面中的菜单选项。当事件具有多个订阅者时,引发该事件时会同步调用事件处理程序。也可通过async/await达到异步调用事件的作用。

2023-07-18 18:32:12 3548

原创 C# 细说async/await的用法

await可以看着是代码执行的分裂点,当程序执行到await后面的语句时,首先系统会将当前的线程释放(回归线程池,其他程序可调用),并捕获当前上下文(打上标记),进入等待(注意:期间没有线程阻塞)。当await后语句执行完毕,根据标记点调用线程(从线程池随机捕获线程,有概率是原来的线程)执行下面的语句。

2023-07-18 16:23:02 1333

原创 C# 参数传递(引用类型参数)

方法中参数的传递方式主要有和(ref,out),而参数有可以分为和,这里主要讲一讲引用类型参数的值/引用参数传递。对于一个引用类型对象,不管是将其作为值参数传递还是作为引用参数传递,我们都可以在方法成员内部修改它的成员。

2023-07-13 12:02:09 1276

原创 C# 内存分配(堆和栈)和内存回收

.NET程序在进程内存中分配出堆栈、托管堆和非托管堆。所有的值类型对象和引用类型对象的引用都分配在堆栈上,堆栈根据对象的生存周期来依次分配和释放,堆栈根据一个指向栈尾的指针来分配内存,效率很高。

2023-07-06 14:12:31 2602 1

原创 C# 依赖倒置原则(DIP)

依赖倒置(DIP):Dependence Inversion Principle的缩写,是一种软件架构设计的原则(抽象概念)。依赖于抽象不依赖于细节。

2023-07-05 15:55:22 623 2

原创 C# 反射(Reflection)总结

反射是.NET Framework 的功能,并不是C#语言特有的功能。简单理解来看就是:给我一个对象,我能,也不知道是什么静态类型的情况下,创建一个同类型的对象,同时还能访问这个对象的各个成员。(在获取其他实体类的字段名或实列,只能获取公有的,而有了反射之后可以获取私有的,可以获取他的基类等等,可以说把家底查得清清楚楚。

2023-06-20 19:14:42 1663

原创 C# 特性(Attribute)总结

特性的作用就是对程序中所标记元素的另加描述和限限制。就像生活中的坐火车的车票一样,对该行程进行了进一步描述(如哪个站,目的地,出发时间等),同时也对描述信息进行了限制(如你错过发车时间就不能上车),出现任何差错都会视为异常。

2023-06-15 14:30:02 4000

原创 C# 委托(Delegate)和事件(Event)总结

从字面意思上说,“委托”就是一件事,我们不亲自去做,而是把这件事交给其他人帮忙做;但从编程语言的角度来说,编程语法机制也是一种C#语言对现实世界逻辑的抽象。

2023-06-14 14:42:58 2217 1

原创 C#多线程Task常见问题(二)

线程安全和锁lock

2023-06-13 18:09:34 1635

原创 C#多线程Task常见问题(一)

多线程临时变量

2023-06-13 17:15:30 414

原创 C#序列化和反序列化(json)

一,什么是Json?json是存储和交换文本信息的方法,类似xml。但是json比xml更小,更快,j更易于解析。并且json采用完全独立于语言的文本格式(即不依赖于各种编程语言),这些特性使json成为理想的数据交换语言。json使用JavaScript语法来描述数据对象,但是json独立于语言和平台。json解析器和json库支持许多不同的编程语言。json语法规则:数据在键值对中.........

2022-03-19 18:32:00 6288

原创 C# 线程与任务

线程线程:对于所有需要等待的操作,例如移动文件,数据库和网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务。一个进程的多个线程可以同时运行在不同的CPU上或多核CPU的不同内核上。一个应用程序启动时,会启动一个进程(应用程序的载体),然后进程会启动多个线程。一,使用Thread类启动线程和数据传输使用Thread类可以创建和控制线程,Thread构造函数是一个无参无返......

2022-03-18 23:28:00 807

原创 C++final和override用法

1. finalC++ 中增加了 final 关键字来限制某个类不能被继承,或者某个虚函数不能被重写,和 Jave 的 final 关键字的功能是类似的。如果使用 final 修饰函数,只能修饰虚函数,并且要把final关键字放到类或者函数的后面。1.1 修饰函数如果使用 final 修饰函数,只能修饰虚函数,这样就能阻止子类重写父类的这个函数了:class Base{public......

2021-08-30 14:04:00 527

原创 QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)

引言TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯。控制器可以设置为服务器端或客户端。关于TCP/IP协议可详看:TCP/IP协议详解 - 知乎 (zhihu.com)总的来说,TCP/IP通讯有两个部分:客户端和服务器QTcpServer(监听......

2021-08-27 17:26:00 494

原创 VS+Qt+Halcon——显示图片,实现鼠标缩放、移动图片

摘要本篇博文记录一下,用VS+Qt+Halcon实现对图片的读取以及鼠标缩放,移动(鼠标事件调用了halcon自带的算子)的过程。以及遇到的坑.....????????先来看一下动态效果图:主要控件:添加一个Label控件,对象名设为label,用于显示图片,并将背景设为黑色,设置方法为:选中Label控件,在属性编辑器中找到styleSheet属性,在其后的值中输入background-co......

2021-08-25 18:13:00 2826 4

原创 QT从入门到入土(八)——项目打包和发布

引言新手上路可谓是困难重重,你永远不知道下一个困难会在什么时候出现,在完成了运动控制卡封装发布过程中可谓是举步维艰。因此记录一下qt5+vs2019的打包发布方法。打包整体思路:将编译后的exe可执行文件及其各种依赖dll、lib、图标、配置文件等先打包放到一个目录中对其进行打包发布(两种方式):利用VS的插件Microsoft Visual Studio Installer ...

2021-08-20 14:20:00 154

原创 且看一文梳理VS2019中dll的创建使用

动态链接库(dll)Windows下有静态链接(lib)库和动态链接库(dll)两种共享代码的方式。本文将介绍dll的应用场景,以及在vs2019平台下的生成和使用。今天的笔记内容说的是平时经常能看见的,运行 VS 项目的时候老在下方加载的.dll。包括一小部分的理论和超大部分的实操。[What] dll是什么动态链接库(Dynamic Link Library)又称为“应用程......

2021-08-16 14:34:00 3007

原创 C++面向对象总结——虚指针与虚函数表

最近在逛B站的时候发现有候捷老师的课程,如获至宝。因此,跟随他的讲解又复习了一遍关于C++的内容,收获也非常的大,对于某些模糊的概念及遗忘的内容又有了更深的认识。以下内容是关于虚函数表、虚函数指针,而C++中的动态绑定实现和这两个内容是分不开的。一,虚函数表、虚指针​当一个类在实现的时候,如果存在一个或以上的虚函数时,那么这个类便会包含一张虚函数表。而当一个子类继承并重写了基类的虚函数...

2021-08-12 16:30:00 160

原创 C++面向对象总结——封装

目录类的封装数据域封装的优点一,类的封装封装的含义:所以属性都是私有的,外部不可以访问提供与属性相关的get/set函数,间接访问私有属性。示例:class Clock{private:int hour,minute,second;public:Clock();//声明无参构造函数Clock(int newH,int newM,int newS);//声明...

2021-08-11 18:43:00 144

原创 QT常用控件(四)—— QStackedWidget控件

引言QStackedWidget继承自QFrame。QStackedWidget类提供了多页面切换的布局,一次只能看到一个界面。QStackedWidget可用于创建类似于QTabWidget提供的用户界面。????????????先来看看QTabWidget控件的效果:需要注意的是: QTabWidget的currentTabText用于修改名称。在插入页中插入新的界面。????????????QStacked...

2021-08-09 17:07:00 1462

原创 QT常用控件(三)——QTreeWidget(树控件),QTableWidget控件

QTreeWidget树控件实例:#include "layout.h"#pragma execution_character_set("utf-8")Layout::Layout(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); //treewidget树的使用 //设置水平头信息 ...

2021-08-09 16:55:00 367

原创 QT从入门到入土(五(2))——多线程(QtConcurrent::run())和线程池

引言在前面对Qt多线程(QThread)做了详细的分析:QT从入门到入土(五(1))——多线程(QThread) - 唯有自己强大 - 博客园 (cnblogs.com)但是最近在做项目时候,要将一个函数单独运行在另一个线程中,并且这个函数是私有函数,用到的数据也是私有数据,不能通过其他类访问,这样怎么办?如何在Qt中的当前类创建线程?一,最简单的多线程QtConcurrent::ru...

2021-08-05 16:42:00 692

原创 QT经验(一)——按钮长按事件分析

引言最近在做qt项目,需要对button按钮添加一个长按事件(比如点击按钮,开始运动。松开按钮,运动停止)。查了些许资料,(差点误把QPushButton的press信号和长按事件混淆)在此记录一下经验。setAutoRepeat以前一直以为QPushButton不支持长按,才发现还有这个功能。用起来很简单: QPushButton *pBtnSub = new QPushBu...

2021-08-04 20:18:00 1288 2

原创 QT从入门到入土(七)——鼠标事件

引言个人认为,事件机制是Qt最难以理解且最为精妙的一部分。事件主要分为两种:在与用户交互时发生。比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等。系统自动发生,比如计时器事件(timerEvent)等。在发生事件时(比如说上面说的按下鼠标),就会产生一个QEvent对象(这里是QMouseEvent,为QEvent的子类),这个QEvent......

2021-08-04 15:39:00 4010

原创 QT常用控件(二)——自定义控件封装

引言Qt已经提供了很多的基础控件供开发使用,而Qt原生的控件有时候并不能满足我们的需求,特别是在工业的运用上,比如我们需要一个日期时间的选择器,Qt虽然已经提供了原生的QDateTime控件,但这个原生控件并不能满足我们的需求,又比如我们需要实现类似微信左侧的消息列表,单纯的原生QListWidget(QListView)并不能完整的满足需求,这个时候我们就会寻找一种可以满足我们需求的控件。而...

2021-08-04 10:29:00 390

原创 QT从入门到入土(六)——定时器

Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。常使用信号和槽(代码看起来比较整洁)但是当使用多个定时器的时候最好用定时器事件来处理。定时器方式一:定时器事件需要: #include <QTimerEvent>方式:利用对voidtimerEvent(QTimerEvent* e)事件的重写。启动定时器int QObject::startTi...

2021-08-03 20:53:00 184

原创 QT常用控件(一)——菜单栏和对话框

引言QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。(本篇主要介绍菜单栏和工具栏)一,菜单栏一个主窗口最多只有一个菜单栏。位于主窗口顶部...

2021-08-03 17:18:00 724

原创 C++lambda表达式

摘录一段简单的Code我也不是文艺的人,对于Lambda的历史,以及Lambda与C++的那段渊源,我也不是很熟悉,技术人,讲究拿代码说事。一,lambda的基本语法当我第一次看到这段代码时,我直接凌乱了,直接看不懂啊。初识lambda,写了点对lambda表达式的一些总结。#include<iostream>using namespace std;int main...

2021-07-30 14:45:00 134

原创 C++面向对象总结——多态

引言了解c++的三大特性是对c++的整体的认识。封装性:类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态(用访问修饰符设置)继承:继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。作用:避免公用代码的重复开发,减少代码和数据冗余。多态:多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行...

2021-07-29 16:13:00 167

原创 C++面向对象总结——继承

引言类是对现实中事物的抽象,类的继承和派生的层次结构则是对自然界中事物分类、分析的过程在程序设计中的体现。一,继承的概念及语法继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类...

2021-07-29 14:39:00 243

原创 C++面向对象总结——类的实践

直接看题吧:第一题输入圆的半径和圆柱的高,依次输出圆周长、圆面积、圆柱体积(π取 3.14)。#include<iostream>using namespace std;class cylinder{public: cylinder() :PI(3.14) { cout << "请输入半径" << endl;...

2021-07-29 13:27:00 1487

原创 C++引用的概念以及基本使用

引言引用是C++的新增内容,在实际开发中会经常使用;C++用的引用就如同C语言的指针一样重要,但它比指针更加方便和易用。我们知道,参数的传递本质上是一次赋值的过程,即将一块内存上的数据复制到另一块内存上。对于像 char、bool、int、float 等基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。而数组、结构体、对象是一系列数据的集合,数据的数量没有限制,可能...

2021-07-28 21:05:00 382

原创 halcon——图像增强算子以及分类

摘要图像增强就是指通过某种图像处理方法对退化的某些图像特征,如边缘、轮廓、对比度等进行处理,以改善图像的视觉效果,提高图像的清晰度,或是突出图像中的某些“有用”,压缩其他“无用”信息,将图像转换为更适合人或计算机分析处理的形式。图像增强技术根据增强处理时所处的空间不同,基本可以分为两类:空间域法和频域法。空间域可以简单地理解为包含图像像素的空间,空间域法是指空间域中,也就是图像本身,直接......

2021-07-26 09:26:00 5505

原创 C++面向对象总结——抽象类(接口)

引言在讲解抽象类之前,我们需要回顾一下什么是纯虚函数:纯虚函数是指对于一个虚函数,只有声明,而其函数体=0。因此,纯虚函数不需要实现,由子类继承后在子类中实现其具体功能。抽象类抽象类,又称抽象基类,是指拥有纯虚函数的类,抽象类只能作为基类,不能构建对象,因为抽象类中的纯虚函数没有函数体如果在程序中对抽象基类构建对象(实例化),那么则会出现报错,具体为下面的示例:class CB...

2021-07-26 08:59:00 1870

原创 QT从入门到入土(五(1))——多线程(QThread)

引言前面几篇已经对C++的线程做了简单的总结,浅谈C++11中的多线程(三) - 唯有自己强大 - 博客园 (cnblogs.com)。本篇着重于Qt多线程的总结与实现。跟C++11中很像的是,Qt中使用QThread来管理线程,一个QThread对象管理一个线程,在使用上有很多跟C++11中相似的地方,但更多的是Qt中独有的内容。另外,QThread对象也有消息循环exec()函数,即每个...

2021-07-20 17:32:00 1241

原创 QT从入门到入土(四)——文件的读写操作

引言文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处理而开发的,所以文件读写是应用程序开发的一个基本功能。Qt 提供了两种读写纯文本文件的基本方法:用 QFile 类的 IODevice 读写功能直接进行读写利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写。一、文件读操作(1)使用QFile类Qt封...

2021-07-17 18:09:00 287

原创 QT从入门到入土(三)——信号和槽机制

摘要 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣, 它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函 数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接 的...

2021-07-17 10:14:00 139

原创 QT从入门到入土(二)——对象模型(对象树)和窗口坐标体系

摘要我们使用的标准 C++,其设计的对象模型虽然已经提供了非常高效的 RTTI 支持,但是在某些方面还是不够灵活。比如在 GUI 编程方面,既需要高效的运行效率也需要强大的灵活性,诸如删除某窗口时可不想把子窗口用代码一个个去析构。Qt 将这两者的优点完美的结合在了一起,创造出了特有的对象模型(Qt Object Model)。一,Qt的基本框架在上一篇中,我们已经完成了Qt的安装和VS的...

2021-07-16 14:55:00 137

原创 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置

引言24岁的某天,承载着周围人的关心,一路南下。天晴心静,听着斑马,不免对未来有些彷徨。但是呢,人生总要走陌生的路,看陌生的风景,所幸可以听着不变的歌,关心自己的人就那么多。就像是对庸常生活的一次越狱,路才刚刚开始。。。。 ...

2021-07-15 18:34:00 1023

原创 C++面向对象总结——数据抽象与数据封装

引言从抽象起就算是正式接触模块化编程了。抽象的定义抽象是指在程序中只向外界提供关键信息,而隐藏后台的实现细节,即只表现必要的信息而不呈现细节。就 C++ 编程而言,C++ 类为数据抽象提供了可能。它们向外界提供了大量用于操作对象数据的公共方法,也就是说,外界实际上并不清楚类的内部实现。在 C++ 中,我们使用类来定义我们自己的抽象数据类型(ADT)。简单的说,我们使用类iostream...

2021-07-15 17:52:00 2031

空空如也

空空如也

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

TA关注的人

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