- 博客(138)
- 资源 (6)
- 收藏
- 关注

原创 软件开发必会技能:简单工厂模式、工厂方法模式、抽象工厂模式,这一篇就够了
工厂模式一般分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。一、简单工厂模式简单工厂模式,工厂类是创建产品的,它决定创建哪一种产品。举个例子,在上下位机通信应用程序中,一般都会要求软件支持多种连接方式,网口、串口等。这时我们去设计软件的话第一想到的是简单工厂模式,由工厂决定创建哪种连接方式,且同一时间只能创建一种连接模式。#include <QCoreApplication>#include <QDebug>// 通信设备接口类class Device{pu
2021-12-11 16:19:46
2914

原创 Hp-Socket高性能网络库介绍零--整体结构
一、目录结构介绍--DOC:目录下是官方提供的文档,包括Development Guide--DotNet:.net项目的开发步骤,可以直接通过nuget部署HPsocket.net--Linux:Linux的工程,包括android build--MacOS:mac环境的开发步骤--Windows:Windows的工程,最常用的开发环境--Bin:编译好的dll和lib--Demo:官方提供的使用示例,包括PUSH模型示例、 PULL模型示例、 PACK模型示例、 性能测.
2021-03-31 18:26:00
7195
4

原创 vs2010下配置HPSocket教程,详细截图附入门demo源码
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 A...
2019-07-05 16:11:47
5854
原创 CMake学习--如何在CMake中编译静态库、动态库并在主程序中调用
通过CMake,我们可以方便地编译静态库和动态库,并在主程序中调用。静态库适合代码量不大且需要保证代码安全的场景,动态库适合代码量大且需要共享的场景。在实际项目中,根据需求选择合适的库类型,并合理组织项目结构,可以提高代码的可维护性和可扩展性。
2025-04-02 15:48:39
757
原创 CMake学习--Window下VSCode 中 CMake C++ 代码调试操作方法
通过以上步骤,我们成功地在Windows环境下 VSCode 中配置了 CMake C++ 项目,并实现了代码调试。这种开发方式充分利用了 CMake 的构建能力和 VSCode 的便捷性,为 C++ 开发者提供了一个高效、灵活的开发环境。在实际开发中,可以根据项目需求进一步扩展和优化配置,以满足更复杂的开发场景。
2025-04-02 15:46:14
928
原创 CMake学习-- install 指令详细说明
使用命令安装库目标。指定静态库文件的安装位置为lib目录。指定头文件的安装位置为include目录。通过CMake的install命令,可以方便地定义安装规则,将构建的文件安装到指定的位置。这对于项目的部署和分发非常重要,因为它确保了软件可以在不同的系统环境中正确运行。在实际项目中,合理使用install命令可以提高项目的可维护性和可扩展性。当你在终端输入make install时,CMake就像一位经验丰富的管家,将编译产物分门别类地安置在系统的各个角落。
2025-04-02 15:35:06
559
原创 【3天快速入门WPF】从小白到新手入门教程
嘿,小伙伴们!如果你已经有一定的C#开发基础,但想快速掌握WPF开发,达到企业级水准,那接下来的这个三天快速入门计划绝对适合你!虽然听起来有点挑战,但别担心,只要跟着这个高强度、结构化的学习计划,你一定能搞定它。首先,我们得搞清楚,WPF的核心知识点到底有哪些。要想达到企业级开发水准,XAML、数据绑定、MVVM、控件使用、命令系统、样式模板这些统统都得拿下。听起来是不是有点多?别急,我们把任务分解到三天里,每天安排合理的内容,保证理论和实践相结合,让你学得扎实又高效。
2025-02-27 16:25:28
477
原创 【3天快速入门WPF】13-MVVM进阶
本篇我们开发一个基于MVVM的登录页面,用来回顾下之前学习的内容登录页面如下:窗体取消了默认的标题栏,调整为带阴影的圆角窗体,左侧放一张登录背景图,右边自绘了一个关闭按钮,文本框和按钮也做了美化。快速来看一下如何实现的。窗口样式调整为None,不允许调整窗口大小,用Border包裹整个窗体实现圆角以及阴影效果,整体分两部分 - 左侧图片、右侧背景图:2. 字体图标去阿里巴巴矢量图标库选好要用的图标,添加入库,然后下载下来添加至项目:主要用上面勾选的两个文件,html文件是下载的图标演示,tff是程序中用
2025-02-27 15:55:12
756
原创 【3天快速入门WPF】12-MVVM
MVVM是的缩写,是一种用于构建用户界面的设计模式,是一种简化用户界面的事件驱动编程方式。MVVM的目标是实现用户界面和业务逻辑之间的彻底分离,以便更好地管理和维护应用程序,并提供更好的可测试性和可扩展性。MVVMModelModel代表应用程序的数据和业务逻辑。它负责存储和管理数据,并且通常不包含任何与用户界面相关的代码。Model 可以是数据实体、数据库访问类、服务类等。ViewView是用户界面的可视化表示,通常由 XAML 文件定义。它负责展示数据给用户,并捕获用户输入。
2025-02-27 10:59:22
815
原创 【3天快速入门WPF】11-附加属性
创建一个静态类,用于定义附加属性。使用方法注册附加属性。提供Get和Set方法来获取和设置附加属性的值。通过以上步骤,我们可以在WPF中轻松实现和使用附加属性。附加属性的主要用途包括为控件添加自定义行为、控制布局信息(如Grid.Row和)以及实现动态样式。
2025-02-27 10:35:39
471
原创 【3天快速入门WPF】10-绑定属性
依赖属性(Dependency Properties)是WPF中的一项关键特性,它具有一些附加的功能和特性,使其在数据绑定、样式应用、动画和属性值继承等方面更加强大和灵活。它被视为一种具有依赖关系的属性,可以在没有明确值的情况下依赖于其他对象或数据源。当使用数据绑定时,依赖属性可以从数据源获取值,并在数据源值发生变化时自动更新。依赖属性的依赖关系和值的改变过程很复杂,尤其在涉及多个依赖属性之间的相互依赖时。
2025-02-26 15:30:48
611
原创 【3天快速入门WPF】9-数据绑定进阶
Binding,出于方便业界一直使用Binding一词的音译,即“绑定”。我理解Binding更注重表达它是一种像桥梁一样的关联关系。WPF中,正是在这段桥梁上我们有机会为往来流通的数据做很多事情。Binding在源与目标之间架起了沟通的桥梁,默认情况下数据既能够通过Binding送达目标,也能够从目标返回源(收集用户对数据的修改)。有时候数据只需要展示给用户、不允许用户修改,这时候可以把Binding模式更改为从源向目标的单向沟通。Binding还支持从目标向源的单向沟通以及只在Binding。
2025-02-18 18:07:45
863
原创 【3天快速入门WPF】6-常用控件【全】
常用属性:: 按钮显示的内容。: 按钮的宽度。: 按钮的高度。常用事件:: 当用户单击按钮时触发的事件。常用属性: 显示的内容。 的宽度。 的高度。: 重复触发事件之间的时间间隔(以毫秒为单位)。`常用事件:: 当用户单击按钮时触发的事件。在这个示例中,当用户点击按钮时,会触发名为 RepeatButton_Click 的事件处理程序。Interval 属性设置了事件重复触发之间的间隔时间(500 毫秒)。注意:RepeatButton 是一个特殊的按钮,当用户按住它时,会不断触发 Click 事件,直到
2025-02-18 13:10:47
1183
原创 【3天快速入门WPF】8-数据绑定基础
以下是一个简单的 WPF 数据绑定示例,使用两个TextBox控件分别表示Name和Age来进行进行数据绑定试验。运行程序后,你会看到初始界面中TextBox 中显示初始名字 “张三”,TextBox 中显示初始年龄 “25”。在 XAML 中创建一个简单的界面,包含一个 TextBox 用于输入名字,一个 TextBox 用于显示年龄。当你在 TextBox 中修改名字时,Person 对象的 Name 属性会被自动更新,反之亦然。它的主要作用是为控件及其子控件提供一个默认的数据源,用于数据绑定。
2025-02-17 17:56:10
789
原创 WPF好用的画图控件InkCanvas,画图应用必备
通过以上步骤和示例代码,你可以在 WPF 应用程序中轻松使用 InkCanvas 控件,实现手写输入、绘图和签名等功能。
2025-02-17 16:18:54
1139
原创 electron中主进程和渲染进程通信3种方式【详细教程】
我们知道electron应用中main.js可以理解成主进程,index.html可以理解成渲染进程。两个进程间是通过 ipcMain 和 ipcRenderer 实现进程通信的。渲染器进程通过 window.api.onReply 接收到回复,并在页面上显示。主进程接收到消息后,通过 event.reply 向渲染器进程发送回复。这两种方法将在后面的博文中继续讨论。
2025-02-10 10:49:48
578
原创 2025最新Electron环境搭建,第一个Electron应用【详细教程】
cnpm是个中国版的npm,是淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm。安装好electron后,目录下自动生成node_modules目录,里面存放到electron所用到模块。由于国内网速问题,直接安装一般会失败。淘宝镜像是淘宝团队为国内用户提供的npm镜像源,它与官方镜像源保持同步,并提供了更快的下载速度。在使用npm初始化项目前,强烈建议将npm源更改到国内镜像源。
2025-02-10 10:28:24
940
原创 【3天快速入门WPF】5-x名称空间
x标识元素的Name(如x:Name定义和引用资源(如x:Key关联 XAML 文件与后台代码(如x:Class支持泛型类型参数(如这些功能使得 XAML 在 WPF 中不仅仅是一个布局描述语言,还提供了强大的数据绑定、资源管理和类型支持的能力。通过这几篇博文的学习讨论,我们可以说已经比较完整地掌握了XAML的语法和常用元素。有了这些知识,我们就可以动手去创建优雅的布局和炫丽的界面了。接下来的章节将使用前面学到的XAML语法和x名称空间里的元素、结合琳琅满目的WPF控件建立实用的软件界面。
2025-01-22 16:59:40
1042
原创 【3天快速入门WPF】3-在xaml中引用其他程序集的名称空间
要提醒大家的是,XAML是一种很灵活的语言,特别是一些用于简化代码的缩略写法。最大的差别就是XAML需要为被引用的名称空间添加一个映射名,用这个映射名来代表被引用的名称空间。冒号后的映射名是可选的,但由于可以不加映射名的默认名称空间已经被WPF的主要名称空间占用,所以所引用的名称空间都需要加上这个映射名。一旦我们将类库中的名称空间引入XAML中,我们就可以在XAML中使用这些名称空间里的类。引号中的字符串值确定了你要引用的是哪个类库以及类库中的哪个名称空间。让我们分析一下XAML引用名称空间的语法。
2025-01-21 16:08:56
1093
原创 【3天快速入门WPF】4-代码后置
在 WPF(Windows Presentation Foundation)中,代码后置(Code-Behind)指的是将与 UI 逻辑相关的 C# 或 VB.NET 代码写入到 XAML 文件所关联的后置文件(如.xaml.cs或.xaml.vb)中。代码后置在 WPF 中的使用是为了分离 UI 设计与应用程序的业务逻辑,提高开发的灵活性、可维护性和可扩展性。WPF 中的代码后置是为了实现 UI 逻辑和业务逻辑的分离,增强代码的灵活性、可维护性、可重用性,并促进事件驱动和数据绑定的应用开发。
2025-01-21 15:47:22
765
原创 【3天快速入门WPF】2-在xaml为对象的属性赋值
在 WPF 中,常见的Binding和用于引用静态资源。普通Binding,直接绑定数据源和属性。绑定,绑定到同一页面中的另一个元素。绑定,基于元素的相对位置进行绑定。,简化控件模板中的绑定。
2025-01-21 11:26:07
770
原创 【3天快速入门WPF】1-从最简单的xaml开始
首先我们要知道xaml语法中声明即定义,意思就是“见到元素就相当于创建实例”,MainWindow.xaml的主干是一个元素里包含着一个 元素。这段程序就是在定义一个Window类的实例,这个实例的一个组成部分是一个Grid类的实例。
2025-01-20 17:28:14
976
原创 开始使用Panuon开源界面库环境配置并手写VS2019高仿界面
资源可以分为静态资源或动态资源进行引用。分别是通过使用 StaticResource 标记扩展或 DynamicResource 标记扩展完成的。StaticResource的用法:通过替换已定义资源的值(x:Key)来为 XAML 属性提供值。这里添加静态资源就是可以对单个控件的样式单独控制,定制化。为后面的控件样式所用。
2025-01-14 17:45:37
942
原创 winform第三方界面开源库AntdUI的使用教程保姆级环境设置篇
AntdUI是一个开源的Winfrom第三方库,它可以使你的Winform窗体程序更加美观。项目地址:https://gitee.com/antdui/AntdUI框架选择.net6编译器要求 Visual Studio 2022 以及以上Visual Studio 安装 旧版本(.NET Framework 4.0 和 4.5)右键解决方案,添加现有项目,将AntdUI.csproj工程添加到当前解决方案中。现在两个工程都在同一解决方案下,但是MyChat(winform)还是无法引用到AntdUI程序集
2025-01-10 18:36:21
4335
1
原创 vs2022开发.net窗体应用开发环境安装配置以及程序发布详细教程
刚刚我们安装的vs2022默认对应.net9 SDK,虽然说.net core/5/6/7/8/9是跨平台的,但是基于.net5/6/7/8/9和.net framework的桌面应用不能跨平台,可以简单这么理解只有.net控制台应用或者ASP.net Web应用跨平台,而winform和WPF只能在windows平台上运行。我认为有两点原因,一方面可以使用.net的新特性,另一方面基于.net的应用可以独立发布,不需要目标PC安装任何.net framework或其他系统级别的组件。
2025-01-08 19:25:42
2317
原创 c#版本、.net版本、visual studio版本之间的对应关系
最近这几年一直没用过c#开发,都是从事Qt c++开发工作,回想一下之前c#还要追溯到2019年,算算时间大概都已过去4,5年了,时间飞快。2019真是个神奇的数字,vs2019是我用的时间最长的一个IDE,新冠起始于2019/12,而微软的.net core 3.0也是发布于2019年,微软终于开始拥抱开源、拥抱跨平台。仿佛2019之前是一个世界,2019之后是另一个世界。。
2025-01-07 17:05:53
2641
原创 关于想在winform中(基于.net framework or .net core/5/6)使用Panuon UI的误会
安装 Panuon UI:通过 NuGet 包管理器安装或Panuon.UI。引入命名空间:在代码中引用。使用控件:使用PButtonPTextBoxPCheckBox等 Panuon UI 控件,替代默认的 WinForms 控件。自定义主题:你可以设置不同的主题来美化你的 UI。这样,你就可以在 WinForms 项目中使用 Panuon UI 来提升应用程序的外观和用户体验了。引入命名空间:在代码中引用。3.使用控件:使用PButtonPTextBoxPCheckBox。
2025-01-06 18:52:45
777
转载 网络库中的分层设计
对于计算机科学领域中的任何问题,都可以通过增加一个间接的中间层来解决”这句话几乎概括了计算机软件体系结构的设计要点。计算机软件体系结构从上到下都是按照严格的层次结构设计的,不仅整个体系如此,体系里面的每个组件如OS本身、很多应用程序、软件系统甚至很多硬件结构也如此。
2024-12-24 15:53:24
53
原创 网络通信之select、poll、WSAAsyncSelect、WSAEventSelect、IOCP、epoll
第2级别的函数相当于变主动查询为被动通知,即网络事件发生时,系统会通知我们处理。select和poll函数在本质上还是在一定时间内主动查询在一组 socket句柄(一个或是多个)上是否有网络事件(可读事件、可写事件或出错事件等),也就是说,我们必须每隔一段时间就主动做这些检测操作。原因是,假设一个服务器有多个连接,在CPU 时间片有限的情况下,我们花费了一定时间检测一部分 socket的网络事件,却发现什么事件都没有,而我们在这段时间内可能有其他事情需要处理,那我们为什么要花时间去做这种检测呢?
2024-12-24 14:14:11
463
原创 类成员函数作为线程函数的两种实现方式传统做法和C++11做法
但是如果是类的静态方法,就无法访问类的实例方法了。为了解决这个问题,我们在实际开发中往往会在创建线程时将当前对象的地址(this指针)传递给线程函数,然后在线程函数中将该指针转换为原来的类实例,再通过这个实例就可以访问类的所有方法了。示例代码中CThread设计成基类,Run 方法是纯虚函数,必须改写,我们应该在改写的Run方法中加入自己实际需要的业务逻辑。这样通过这个指针可以自由访问类的实例方法。这一技巧被广泛用于各类C++项目中。线程函数必须定义成类静态成员函数,且函数签名必须符合线程函数的签名要求。
2024-11-21 14:27:36
336
原创 最简单的生产者消费者问题,使用互斥锁mutex,条件变量condition_variable做线程同步
在这个示例中,我们使用了std::mutex来保护对共享缓冲区的访问,避免多个线程同时修改缓冲区。生产者线程通过通知消费者线程,消费者线程通过cv.wait()等待缓冲区中有商品可以消费。通过这种方式,我们实现了生产者和消费者之间的同步和协作。
2024-11-19 10:29:44
427
原创 std::weak_ptr应用于观察者模式的示例
观察者模式是一种行为设计模式,其中一个对象(主题或发布者)维护一组依赖对象(观察者),并在状态变化时通知这些观察者。主题对象的生命周期通常较长,而观察者对象的生命周期通常较短,使用weak_ptr可以确保观察者在主题对象销毁时不会导致内存泄漏。ObserverObserver使用可以有效地避免观察者模式中的循环引用问题,避免因为观察者持有主题对象的shared_ptr而导致无法销毁的问题。在这个示例中,Subject类管理观察者的生命周期,而每个Observer使用weak_ptr。
2024-11-18 20:24:42
598
原创 unique_ptr自定义删除器
你可以通过传递一个自定义的删除器(Deleter)来改变unique_ptr的资源释放行为。删除器可以是一个函数指针、函数对象(仿函数)或 Lambda 表达式。要自定义删除器,你需要提供一个能够释放资源的对象或函数,并将它与unique_ptr一起使用。删除器的类型可以接受任何类型的删除器,包括函数指针、仿函数(类)、Lambda 表达式等。删除器的功能:删除器负责清理资源,你可以在其中实现自定义的释放逻辑,比如释放内存、关闭文件、释放网络连接等。不直接支持删除器:如果你希望使用,你需要创建。
2024-11-18 19:41:27
437
原创 unique_ptr,shared_ptr,weak_ptr 三种常用智能指针对比
unique_ptr:单一所有者,独占资源。shared_ptr:多个所有者,共享资源,引用计数。weak_ptr:观察者模式,不拥有资源,避免循环引用。
2024-11-18 19:02:25
294
原创 CMake学习--ctest全面介绍
ctest是 CMake 自带的一个测试工具,主要用于自动化测试管理和执行。它与 CMake 的CTest模块紧密集成,使得构建和测试流程更加高效和自动化。本文将详细介绍ctest的功能、使用方法以及一些高级特性。ctest允许自定义测试运行器,通过ctest -Sctest是一个功能强大的工具,适用于各种测试场景。从简单的单元测试到复杂的集成测试,ctest提供了丰富的功能来支持测试管理和自动化。通过配置和使用ctest,你可以提升测试的效率和准确性,从而提高软件质量和可靠性。
2024-08-27 15:23:54
627
1
原创 CMake学习--add_library函数用法
INTERFACE:创建一个接口库,没有实际的构建产物。用于传播编译选项、包含目录、链接库等。:定义一个接口库。:将接口库MyLib链接到目标Target,使其获得MyLib的所有设置。接口库在管理大型项目或库时非常有用,可以帮助保持构建系统的整洁和模块化。
2024-08-26 17:00:36
447
原创 CMake学习--add_subdirectory函数用法
用于将子目录添加到构建中,并在该子目录中查找文件。结构化管理: 这种方法使得大项目的结构更加清晰,便于维护。目标链接: 你可以在子目录中定义库,并在其他子目录中链接这些库,形成良好的模块化结构。设置选项: 在 CMake 命令行中使用-D参数来设置选项的值。
2024-08-21 19:38:32
572
原创 CMake学习--构建简单工程
创建:定义你想要的宏和占位符。配置 CMake:在中使用命令生成config.h文件。设置变量:在 CMake 中设置你希望在config.h中定义的宏的值。使用config.h:在源代码中包含并使用这些宏。这样,你可以灵活地控制代码中不同的配置选项,并使得你的项目能够根据不同的构建配置进行调整。
2024-08-21 19:37:58
300
原创 CMake学习--CMake常用命令大全
工程根目录:运⾏cmake命令的⽬录。建议定义为${PROJECT_SOURCE_DIR}/build下:环境变量:环境变量:当前处理的CMakeLists.txt⽂件所在路径;:target编译⽬录;:输出调⽤该变量的CMakeLists.txt的完整路径;:输出该变量所在的⾏;:定义⾃⼰的cmake模块所在路径;:重新定义⽬标⼆进制可执⾏⽂件的存放位置;:重新定义⽬标链接库⽂件的存放位置;:返回由PROJECT指令定义的项⽬名称;:⽤来控制IF…ELSE…语句的书写⽅式;控制默认的库编译⽅式。
2024-08-21 10:55:48
454
HPSocketDemo1.rar
2020-09-23
CefMFCDemo.rar
2020-04-07
OpenCVCam.rar
2020-03-26
CowBoyDemo.rar
2020-03-24
HPSocketDemo1.rar
2020-03-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人