自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (1)
  • 收藏
  • 关注

原创 Qt 动画框架类以及在项目优化中使用

待续。

2025-03-21 16:55:12 90

原创 无锁编程在项目优化中的应用

待续。

2025-03-21 16:52:05 315

原创 Qt图形视图框架在项目中的应用

Qt图形试图框架是Qt库中用于创建2D图形用户界面的模块。它提供了丰富的绘图功能,支持绘制形状、文本、图像以及处理复杂的图形效果。通过使用Qt Graphics View框架,开发者可以构建交互式和动态的图形应用程序,如绘图软件、地图应用和数据可视化工具等。

2025-03-21 16:50:36 276

原创 提升客户端程序性策略

在停车项目中随着过车的增加,程序运行时间的累积,程序可能会越来越慢,降低过车效率,针对此进行一些优化,先打个标记待后续空闲进行记录。

2025-03-05 23:10:15 71

原创 C++ 内存序在多线程中的使用

C++11中的内存序(Memory Order)为开发者提供了工具,帮助控制多线程程序中不同线程之间的内存操作顺序,从而避免由于编译器或处理器优化导致的指令重排问题。这些内存序提供了从无序到严格一致的内存访问保证,让程序员能够在性能和安全性之间进行权衡。本文将详细介绍C++中的六种内存序,并通过实际例子补充说明它们的应用场景。

2025-03-05 23:06:05 1095

原创 提升C++项目编译速度

提高程序编译效率一方面从代码文件管理方面不断降低不同文件之间的依赖关系,另外一方面从代码的业务层面剥离剧烈变动的业务逻辑和相对稳固的代码框架,尽可能的将变化部分小范围可控,尽可能的降低耦合度,这方面设计模式的使用是一个不错的选择。此外一些编译器上的配置如开启多核编译等以及一些加速编译的工具也有一定的效果,此处不详谈这方面。https://blog.youkuaiyun.com/WSTONECH/article/details/143989953文章浏览阅读282次。

2025-02-22 23:16:32 1179

原创 QSplashScreen --软件启动前的交互

QSplashScreen 是 Qt 中的一个类,用于显示启动画面。它通常在应用程序启动时显示,以向用户显示应用程序正在启动的状态。启动画面可以是一个图片,也可以是一个包含了文本、图片等内容的窗口。//slots//protected 可以继承自绘。

2025-02-21 17:07:08 960

原创 Qt程序退出相关资源释放问题

通过重写主界面的这个函数可在窗口关闭前执行一些自定义的操作,比如询问用户是否真的要关闭窗口,或者保存未保存的数据。如果该窗口是主窗口,且所有子窗口都已关闭,应用程序会退出,退出前会触发和aboutToQuit信号。• 当调用quit()时,它会退出主事件循环,触发QApplication::exec()返回,并关闭所有打开的窗口。• quit()通常用于在应用程序中实现“退出”功能,比如在菜单项的“退出”操作上绑定这个函数。• close()适用于关闭单个窗口或控件的场景,比如“关闭”按钮的操作。

2025-02-20 16:18:34 1029

原创 CRTP在项目优化中的使用

CRTP 全称,即奇异递归模板模式。是一种 C++ 编程技巧,使用模板类和继承的组合来实现。该模式的关键思想是:在模板类的定义中,模板参数是当前类自身(通常是派生类)。这个技巧通常用于实现编译时多态,优化性能,C++中std:: enable_shared_from_this 也是一种CRTP的实践。。

2025-02-19 21:45:26 826

原创 PostgreSql数据库执行统计

在实际项目中为了确保软件长时间正常运行,监控数据库的执行情况非常有必要,这个扩展可以帮助你识别最频繁运行的查询、哪些查询消耗的时间最长,以及系统的整体工作量,从而对性能瓶颈进行诊断和优化。PostgreSql的pg_stat_statements插件提供一种方法追踪一个服务器所执行的所有 SQL 语句的执行统计信息,可以用于统计数据库的资源开销,分析TOP SQL。

2025-02-17 16:48:21 213

原创 内存池和对象的使用

Boost.Pool 包含一些用于管理内存的类。虽然 C++ 程序通常用于 new 动态分配内存,但内存提供方式的详细信息取决于标准库的实现和操作系统。例如,使用 Boost.Pool,您可以加速内存管理,从而更快地为程序提供内存。Boost.Pool 不会更改操作系统的行为 new。Boost.Pool 会首先从操作系统请求托管内存 - 例如,使用 new .从外部来看,您的程序已经分配了内存,但在内部,内存还不是必需的,而是交给 Boost.Pool 来管理它。

2025-02-14 15:31:45 950

原创 Qt中QApplication 类和uic、moc程序

这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。有时候新增的类,编译器由于某种原因一直生成不了moc_xxx.cpp文件,此时可以手动调用moc程序解决。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。,程序中真正是通过这个类去控制界面文件,而不会直接操作界面文件。的形式记录界面的控件、属性、位置和布局等等,而实际。管理图形用户界面应用程序的控制流和主要设置。文件生成相关类文件ui_xxx.h。应用程序的初始化和结束。

2025-02-14 09:53:17 500

原创 Qt事件机制

事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt。

2025-02-13 22:39:13 949

原创 轻量级TinyXml2的应用

TinyXML2 是 simple、small、efficient 的基于DOM (Document Object Model,文档对象模型) 的开源 C++ XML文件解析库,可以很方便地应用到现有的项目中。目前,TinyXML1 开发已经停止,所有的开发都转移到了 TinyXML2。TinyXML2 适用于大部分 C/C++ 的项目,经得住考验,是最好的选择。较 TinyXML1 而言,TinyXML2 化繁为简,使用时,而 TinyXML1 需要包含 6 个文件,一般生成静态链接库供项目使用。

2025-02-13 19:50:03 331

原创 Qt元对象系统

元对象系统引用反射的基本思想。所谓反射,就是指对象成员的自我检查。使用反射编程(reflection programming),就可以编写出通用的操作,可对有各种不同结构的类进行操作。使用通用的值存储器QVariant,就可以按照一种统一的方式来对基本类型和其它的普通类型进行操作。​ 简而言之,所谓的反射模式,就是通过自己来查看所有的属性,通过自己的元对象属性来访问自己的全部属性,为什么不直接使用成员函数呢?使用成员函数过于繁琐,通过元对象对应的方法可以快速访问对象的属性 ​。

2025-02-09 22:59:46 983

原创 C++四种类型转换

当进行上行转换,也就是把子类的指针或引用转换成父类表示,这种转换是安全的;当进行下行转换,也就是把父类的指针或引用转换成子类表示,这种转换是不安全的,也需要程序员来保证;允许将任何指针类型转换为其它的指针类型;特别是开辟了系统全局的内存空间,需要在多个应用程序之间使用时,需要彼此共享,传递这个内存空间的指针时,就可以将指针转换成整数值,得到以后,再将整数值转换成指针,进行对应的操作。2.用于基本数据类型之间的转换,如把int转换成char,把int转换成enum等等,这种转换的安全性需要程序员来保证;

2025-02-09 11:54:52 339

原创 Boost中几种有趣容器的应用

需要注意的是circular_buffer的迭代器不是循环的,指向或超过end()的迭代器也会引发断言异常,前面所说的到达末尾时自动循环使用容器的另一端空间指的是当达到容器的容量上限,继续push_back方法压入元素时,原来begin处的元素就会被覆盖,原来begin + 1处的元素成为新的begin。C++的STL的map和mutil_map可以把key映射到value,但是这种映射关系是单向的,然而实际项目中有一些场景,双射容器更合适。它实现了一个通用、与标准库的容器一致的接口,并且具有与。

2025-02-09 11:35:44 747

原创 c++可变参数和折叠表达式详解

在C++编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了<stdarg.h>头文件,其中定义了一组宏和类型,用于处理不定参数函数。C++继承了C语言的可变参数机制,使用了stdarg.h提供的宏来处理不确定数量的参数。其原理基于栈的推入和弹出过程,不需要明确参数数量。此外,C++提供了可变参数机制,让我们能够创建接收任意数量参数的函数。这一特性在许多实际应用中非常有用,比如日志记录、函数重载等。<stdarg.h>

2025-02-02 23:54:46 1495

原创 C++中提高代码稳定性和兼容性的语法

C++11中提升编程代码稳定性和兼容性的一些语法介绍和使用举例。

2025-02-01 22:18:10 745

原创 C++中提高代码易用性的语法

基于范围的for循环中,不需要再传递容器的两端,循环会自动以容器为范围展开,并且循环中也屏蔽掉了迭代器的遍历细节,直接抽取容器中的元素进行运算,使用这种方式进行循环遍历会让编码和维护变得更加简便。} // 没有参数, 参数列表省略不写。在遍历关联型容器时也会出现同样的问题,基于范围的for循环中,虽然可以得到一个std::pair引用,但是我们是不能修改里边的first值的,也就是key值。很多时候,lambda 表达式的返回值是非常明显的,因此在 C++11 中允许省略 lambda 表达式的返回值。

2025-02-01 17:44:32 1035

原创 std::call_once的原理及使用

是 C++11 中引入的一个模版函数,实现多线程环境下实现单次调用,避免重复执行同一操作。

2025-02-01 16:22:08 603

原创 项目中enable_shared_from_this的使用

std::enable_shared_from_this是在内部保存一个对 this 的弱引用(例如 std::weak_ptr)。当 std::shared_ptr 的构造函数检测到无歧义且可访问的 enable_shared_from_this 基类时,如果内部存储的弱引用未被生存的 std::shared_ptr 占有,就会赋值新建的 std::shared_ptr。enable_shared_from_this 是个CRTP模板类,提供了一个可以返回一个shared_ptr的接口。

2025-01-27 20:37:08 129

原创 正则表达式以及Qt中的使用

匹配下标.indexIn 匹配长度 .matchedLength。正则由表达式+量词+断言组成。

2025-01-23 21:37:08 607

原创 项目优化之文件监控

QFileSystemWatcher 是 Qt 框架中提供的一个类,用于监视文件系统中的文件和目录的变化。它允许你在文件或目录发生变化时接收通知,并可以用于监视文件的创建、删除、重命名以及内容修改等操作。这对于需要实时监控文件系统变化的应用程序是非常有用的。

2025-01-23 17:09:03 214

原创 项目优化之文件监控

在停车项目中对于场内的僵尸车程序每天都会进行统计输出一个excel表格记录到指定文件,同时定期通过邮件的方式进行发送到管理员的邮箱中,从而进行人为干预;但是对于一些车场僵尸车较多,可能存在人为删除或篡改僵尸车日报,导致客户以为程序有问题从而引起客诉。

2025-01-23 17:03:59 191

原创 项目优化中文件压缩

在停车收费项目中,一些车流量大的车厂日志信息文件增加的很快,虽然采用spdlog根据大小限制了每一份日志的大小,但是往往这种车流量大的车厂是一些大型商场,各种类型车辆收费不同,不同时间往往有不同的优惠,且跟车严重会带来不少各种各样的问题;日志需要保存的时间就更久一些,因此对于日志按照时间尺度进行打包压缩是一个很好的方案,先mark以下,待后续空闲补充该部分内容。

2025-01-21 22:00:54 164

原创 excel表格的读写

项目中产生的数据除了可视化处理经常也需要以excel的形式导入导出,如停车收费项目中月租车数据、账单数据和过车数据等经常需要从软件中检索导出备份或做账目统计,也有必要将导入的数据可导入软件,以便恢复数据,目前先mark,待后续空闲在整理此处内容。

2025-01-21 21:52:24 112

原创 动态库开发和调试

在设备相关的项目中动态库的开发必不可少,无论是使用第三方设备进行开发还是自家设备发布配套动态库等,都涉及库的接入调试,此处先mark,待空闲整理这部分内容。

2025-01-21 21:41:00 155

原创 项目中数据库链接池使用

项目中数据库的增删查改及其频繁,连接的创建和销毁会很消耗资源,从而拖慢程序;初始创建连接池很有必要,先mark后续空闲整理这部分优化内容。

2025-01-21 21:35:31 237

原创 软件源码SVN版本号追溯

工作中软件开发过程中根据需求变更、缺陷修复、不同人员定制功能等等实际现场使用的软件会有不同的版本,若出现问题难以进行源码追溯,排查问题困难。

2025-01-14 16:22:33 390

原创 fmt 字符串格式化在项目中的使用

fmt 库是一个开源的 C++ 格式化库,它提供了一种简洁、安全和方式来进行字符串格式化,headonly全部头文件实现,直接引入项目即可。该库的设计目标是提供与 Python 的语法类似的功能,同时保持 C++ 的类型安全性和性能,在C++20中引入标准。

2025-01-08 21:05:57 516

原创 工作日志记录

记录工作中细碎的感悟和经验,持续补充中。

2025-01-08 20:20:26 253

原创 内存泄露避免和检测

软件开发过程中,避免内存泄漏以及对内存泄漏的检测,待后续空闲补充。

2025-01-08 20:17:59 189

原创 gtest在代码迭代中测试应用

在项目升级优化中对于一些在重要模块建立必要的单元测试极为重要,如常用的计费模块,在优化代码迭代升级时保证计费前后的一致性及其重要,但是对于众多的计费规则,边界情况众多,每次升级都进行全面测试特别耗费开发时间;再此引入单元测试gTest,建立完备的边界单元测试用例,在每一次迭代后可以快速的检测是否优化迭代导致计费规则前后不一致问题,保证在项目提测前减少bug。

2025-01-08 20:15:09 208

原创 项目优化之职责链模式应用

职责链模式,是一种行为型模式,使多个对象构成对象链,将一个请求传递给对象链,哪个对象适合处理这个请求就让哪个对象来处理,可避免请求的发送者和接收者之间的耦合关系。如果请求在对象链上节点处理后仍可以往下传递,这种每个节点只处理一部分的职责链即是功能链,类似于流水线每个站点只处理任务的一部分,到流水线尽头任务即完成。职责链模式的优点发送者和接收者不需要知道彼此的具体细节。可以动态地添加或修改处理链,而不影响其他部分。请求可以被多个对象处理,不必绑定到特定的处理者。

2024-12-31 23:12:54 716

原创 项目优化之状态模式

整理完过车线程后在处理续写,先打个标记。

2024-12-31 23:09:47 194

原创 观察者模式和发布订阅模式

简单来说就是定义了被观察类与观察类的关系,让多个观察对象同时监听一个被观察对象,当被观察者状态发生变化时通知所有的观察对象,便于及时更新观察者状态。观察者: 内部包含被观察者对象,当被观察者对象的状态发生变化时,接收状态更新通知,更新自身状态。被观察者: 内部包含了所有观察者对象,当状态发生变化时通知所有的观察者状态的更新。

2024-12-31 23:03:51 120

原创 项目优化之策略模式

策略模式(Strategy Pattern) 是一种行为型设计模式,把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离,即算法本身和使用算法的客户端代码是解耦的。最终将具体的计费规则单独以插件的形式接入程序,从而保证不同项目不同版本的程序计费规则的开发和迁移独立于主程序,极大的节约了开发资源。对于规则在不同版本之间的迁移,可以采用Qt的插件将不同的计费策略编译为插件,便于适用不同版本的程序,关于插件参考。通过定义不同的策略类来实现不同的算法,客户端可以根据需要选择具体的策略。

2024-12-31 22:57:05 1268

原创 项目优化之备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便于在不同时机可以切换到不同的状态中。

2024-12-23 21:08:53 1134

原创 结构性设计模式-----适配器模式

将一个类的接口转换为客户希望的另一个接口,Adapter模式使得原本由于接口不兼容的类不能一起工作的类可以一起工作。

2024-12-23 11:56:08 932

OFDM信道估计与均衡 ZF MMSE RLS LMS

LMS_plot设为1和0分别运行线性均衡(ZF MMSE)和自适应均衡(LMS RLS)

2017-05-30

空空如也

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

TA关注的人

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