- 博客(371)
- 资源 (39)
- 问答 (2)
- 收藏
- 关注

原创 DRY编码原则
在一个系统中,每一处知识都必须单一、明确、权威地表达。这一点不仅在代码过程当中,在数据结构,甚至文档当中都需要遵守这一原则。}EXAM;有了开始,结束时间,就不需要时长了。
2023-05-01 15:19:20
711
原创 QMap清空手动分配的内存
摘要:本文探讨了在QMap中使用堆内存时的内存管理问题。当QMap存储手动分配的指针时,直接调用clear()会导致内存泄漏。文章通过示例展示了正确做法:先遍历删除指针对象,再清空QMap。同时推荐使用智能指针(如shared_ptr)进行内存管理,它能自动释放内存,避免手动管理带来的风险。智能指针通过生命周期自动管理内存,在作用域结束时释放资源,有效防止内存泄漏和野指针问题。(150字)
2025-06-04 15:06:48
879
原创 错误代码0xc0000005意味着什么
本文分析了C/C++编程中常见的0xC0000005内存访问冲突错误。该错误通常由三种情况引起:解引用空指针、访问野指针(已释放内存)以及数组越界访问。通过示例代码展示了每种错误的具体表现,并指出越界访问有时不会立即报错但仍属于未定义行为。总结认为0xC0000005错误的本质是访问了未分配的内存区域,建议开发者从这三个主要方向排查问题。文章强调即使某些越界访问未直接导致崩溃也属于严重隐患,应采用工具或规范主动预防这类内存错误。
2025-05-29 13:56:31
368
原创 不要memset(QString)
摘要:在C++中使用C语言的sizeof和memset处理复杂数据结构存在隐患。文章通过一个使用QString的结构体示例演示了该问题:memset破坏了QString的内部数据结构导致程序崩溃。解释sizeof只能获取编译时确定大小的类型,而memset会覆盖对象内部状态(如引用计数、指针等)。建议对C++复杂类型使用专门的初始化方法(如QString::clear()),避免直接使用memset这类内存操作函数。
2025-05-28 15:36:06
407
原创 c++内存栈被损害的问题
1、__stdcall是win32 api默认采用的调用方式,参数采用从右到左的压栈方式,由被调用者(自己)清理栈。2、__cdecl是C语言的调用方式,参数也是采用从右到左的压栈方式,有调用者来清理。为什么需要__cdecl,主要是因为有些函数的参数是不定长参数,被调用者自己都事先无法知道参数的长度,只有调用者才知道,所以函数调用完后只能由调用者来清理。
2025-04-16 09:42:57
820
原创 Qt程序 Windows打包
windeployqt.exe是Qt自带的命令行工具,专门用于创建Windows应用程序的发布包。它的核心功能是自动检测并复制应用程序运行所需的动态链接库(DLL)、插件、翻译文件等资源到指定目录。这样,即使在没有安装Qt环境的电脑上,应用程序也能正常运行,避免了因缺少依赖项而导致的错误。Windows部署工具旨在自动化创建可部署文件夹的过程,该文件夹包含从该文件夹运行应用程序所需的Qt相关依赖项(库、QML导入、插件和翻译)。(这一句很关键,说明了windeployqt的作用)
2025-04-07 14:10:46
684
原创 老毛桃装机过程问题记录
这里面最关键的就是,用guid分区,否则无法安装。EFI启动和Legacy启动的区别UEFI(统一可扩展固件接口)和Legacy(传统BIOS)是两种不同的计算机启动模式,它们在系统支持、磁盘分区、启动速度、安全性等方面存在显著差异。系统支持Legacy:支持32位和64位操作系统,兼容性较强,尤其适用于旧设备和运行旧版32位专业软件的场景。1UEFI:仅支持64位操作系统,专为现代64位架构设计,适用于Windows 10及以上版本的系统。磁盘分区。
2025-03-26 13:36:00
772
原创 QT非UI设计器生成界面的国际化
用QT开发多语言界面程序,主要包括以下几个步骤1)在程序设计阶段,程序代码中每一个用户可见的字符串都有tr()函数封装2)在项目配置文件(.pro文件)中设置需要导出的翻译文件(.ts文件),使用lupdate工具扫描项目文件 中需要翻译的字符串,并生成翻译文件3)使用Qt的Linguist程序打开后成的翻译文件,将程序中的字符串翻译为需要的语言,如将所中文字符串翻译为英文4)使用lrelease工具编译翻译好的翻译文件,生成更为紧凑的".qm"文件。
2025-03-17 15:31:07
408
原创 C++的二维数组
在 C++ 中,二维数组是一种常用的数据结构,它可以看作是数组的数组,类似于数学中的矩阵。以下将从定义、初始化、访问元素、内存布局和使用示例等方面详细介绍 C++ 中的二维数组。二维数组的一般定义语法如下:数据类型 数组名[行数][列数];其中,数据类型 可以是任意有效的 C++ 数据类型,如 int、double、char 等;数组名是用户为数组取的名称;行数 和 列数 分别表示数组的行数和列数,它们必须是常量表达式。示例:// 定义一个3行4列的二维整数数组。
2025-03-14 15:54:20
1308
原创 如何参与开源项目
总起来说,就是创建自己的分支,然后请求合并分支,合并分支时,就是代码维护的大拿们对你提交的代码进行审核,审核通过后,才能合并代码,这样就完成了代码的提交。
2025-02-08 15:30:10
510
原创 Excel的配置-开放的XML文件
最后,简单的来说,xlsx,就是一个压缩的xml文件集合。那这个Xml文件是什么情况呢?这样了解通了Excel的配置之后,想通过程序更改xml就简单了,你也可以输出你想要的图表,程序员的才华终于可以施展了。哈哈,原来就是xml文件,那不就简单了,哈哈!
2025-01-20 09:46:15
807
原创 够用即好的软件
本质上,上面两个方法,实现的功能是一样的。第二种方法,扩展性更好。但现实世界不会让我们生产出太多真正完美的产品,尤其是完全没有Bug的软件。时间、技术、急躁合力对抗着我们。然而,莫要太沮丧。如杂志上一篇由爱德华.尤登写的文章所述,你能训练自己写出够好即可的软件-----对用户、未来的维护者来说够好即可,只要好的程序能让你自己内心平静就可以。你会发现,你变得更有效率,用户也更快乐。而且,可能让你更开心的是,更短的孵化期促使你的程序实际更好了。
2025-01-17 14:16:31
391
原创 使用外部配置参数化应用程序
这很简单,其实就是一种意识,然而,却很重要。正如程序员修炼之道所说:如果没有外部配置,代码的适应性和灵活性就会大打折扣 ,这是坏事吗?在现实世界中,不适应环境的物种会死亡。毛里求斯岛上的渡渡鸟因为不适应岛上出现了人类与家畜,很快就灭绝了。这是被记录的首个因人类活动而灭绝的动物物种。一般可配置化的东西有如下:1、外部服务的证书2、日志级别与日志位置3、应用程序使用的端口、IP地址、机器名及集群名4、特定环境的校验参数5、外部设置参数,例如:时间间隔6、DLL的位置。
2025-01-06 17:58:27
394
原创 c++表达范围勿用数学符号
这种错误,其实就是把数学的表达,带到程序来了。在C++ primer plus书籍中P157,专门提到了这一点:取值范围的测试的每一部分都使用AND操作符将两个完整的关系表达式组合起来。不要使用数学符号将其表示为:编译器不会捕获这种错误,因为它仍然是有效的C++语句。
2024-12-30 15:11:51
584
原创 Qt导出Excel图表
QXlsx 是一个非官方的、独立的 Qt 库,用于读写 Excel 文件(.xlsx 格式)。这个库提供了一个方便的方式来创建新的 Excel 文档或编辑现有文档,而不依赖于 COM 或其他外部接口,使其适用于跨平台应用程序。QXlsx 的主要特性读取和写入 Excel 文件:支持从 .xlsx 文件中读取数据,并能够写入新数据或修改现有数据。支持单元格格式:可以设置字体、边框、颜色、对齐方式等多种单元格格式。多种数据类型:支持字符串、数字、日期和时间等多种类型的数据输入。
2024-11-28 15:57:27
762
原创 vs提示未指定的错误的问题
vs就是一个临时配置文件,删除了可以自动生成。然而,如果没正常关闭软件,出了问题,可是很让头疼,直接删除.vs文件就可以了。
2024-10-29 10:26:53
620
原创 window的0xc000007b错误
这说明基于viusal studio运行库开发的程序,都必须在visual studio库上运行。VC2015运行库,全称Visual C++ 2015运行库,是由微软公司发布的一套运行时库,用于支持用Visual C++ 2015开发的应用程序运行。这些运行库包含了运行用Visual C++开发的应用程序所必需的环境组件。vc++2015运行库软件功能:1、Visual C++ Redistributable Package 安装 Visual C++ 库的运行时组件。
2024-10-28 10:22:03
399
原创 EffectiveC++21条必须返回对象时不要返回引用(通俗讲解)
当然,你会从 getStuScore的返回值中引入构造和析构的开销,但从长远来看,这是为正确的行为付出了一个小的代价。此外,让你恐惧的账单再也不会到来。像许多编程语言一样,C++允许编译器实现者在不改变可视化代码行为的前提下,对代码进行优化,以达到改善生成码性能的目的。在一些情况中,我们发现,getStuScore 返回值的构造和析构可以被安全的消除。当编译器利用了这个事实(编译器经常这么做),你的程序就会以你所期望的方式进行下去,只是比你想要的要快。
2024-10-12 13:29:19
278
原创 Qt多线程操作sqlite数据库
通过锁解决了sqlite数据库多线程操作的写冲突和读写冲突,锁是有消耗的,但很小,我实测6-19ms,这个消耗算是可以了。多线程操作sqlite数据库,关键之处就是在于加锁,保存同时只有一个写的操作;读的操作是可以并发的;有写的操作,读的操作也必须等待,可以说,同时只有一个写操作,无其它操作,通过锁就达到了这一个目的。如果一个线程正在写,另一个线程也要写,怎么办,锁就会让另一个线程等待前一个线程写完,自己再写。锁的本质意义就是保证了,锁的区域,只有一个写线程在访问,而读的线程,可以并发。
2024-09-30 13:39:35
1883
原创 板子电源接线
AC 交流电源接入脚 220VFG 接大地的 也就是220V的地G: 输出电压的负极V: 输出电压的正极可以接 上面标示的G是公用的铭牌上标着输入是AC220V,输出是DC32V,说明您买的是交流220V变直流32V的开关电源,只能输出直流32V。其中2个AC接口接交流220V,交流不分正负;1个FG接口为悬空点;3个G接口为直流32V电源的负极,3个V接口为直流32V电源的正极,一般G接口和V接口是成对的,每一对G—V为一组直流32V电源。
2024-08-22 17:27:27
2052
原创 Qt中英文支持
中英文对应,就是中英文一一对应,并不是我一开始想的自动翻译,这就好像键值对一样,就是这么的简单。相应资料链接:https://download.csdn.net/download/maokexu123/89658658。
2024-08-21 17:41:26
584
原创 winApi与QtApi的共享内存通信
1、是注意QT的封装,其key,在源码内部进行了处理,好在,提供了api接口,可以获取内部的key.2、信号量是进程间协作的常用的协作机制,非常的好用,也非常的简单,就是+1,-1操作,WaitForSingleObject函数实际就是获取成功则-1操作,其条件就是>0则获取了锁,
2024-08-15 16:31:14
1088
原创 InstallShield协议制作与去掉单位
许可协议要么没有,要么默认是英文的,我们一般需要把许可协议改成中文的。许可协议首先是rtf文件,写完内容,放到这里:beginabort;endif;szMsg = "";elseendif;szMsg = "";szMsg = "";if (nvSize!elseendif;endif;
2024-07-29 15:03:07
476
原创 Qt的64位程序与32位程序的通信
简单的说就是通过共享内存实现了64位程序与32位程序的通信,这样好处挺多。因为这样程序的独立性增强了,共享内存,真得很好用,特别是qt对共享内存的封装特别的好,直接带了锁的功能,lock,unlock非常的好用。其关键如图所示:关键就在于定死长度的数据类型,这样32位程序与64位程序都可以用,这也理解了qint32这种带着长度类型的好处了,一眼就可以看出其长度是多少,在跨进程时,就可以放心的使用,因为其长度是固定的,不同的处理器都可以正确的解析这种类型。
2024-07-04 11:36:30
1512
原创 QT的TCP服务端与多客户端通信
QT有自己的特色,大体流程各个语言都差不多,整体可以这样理解:客户端能找到服务端,然而,服务端一开始找不到客户端,如果想维护常连接,必须客户端发起,服务端对连接进行管理,从图中可知服务端需要管理这一个套接字池。
2024-06-25 15:29:35
1317
原创 Qt报表实现-QPainter+QPrinter
这里最关键就是根据位置进行画了,有些复杂,但可以精确控制位置,也是非常好的。其坐标在左上角,这与视图的坐标是一致的,其实,可以理解,其就是这么一个图:然后,就可以按照这种坐标,进行画自己想要的东西:表格、文字、图画等。项目下载地址:https://download.csdn.net/download/maokexu123/89478200。
2024-06-24 15:50:03
1059
原创 qt经典界面框架
其实就是一个简单的界面显示,是很常用的形式。说起来简单也是简单,但当初,刚开始做时,感觉非常的复杂,不知如何下手。现在感觉简单多了。这个框架利用了QT的现成的MainWindow与QDockWidget,这样就很轻松拥有了界面上的组件。然则,这离系统要加菜单之类的东西,边界的设置,还是有差距的。这就用到了,QT的界面组合。QT的界面可以任意的组合,就像搭建积木一样。这一个界面很简单,里面有很多可以扩充的地方,扩充好了,就是一个非常漂亮的系统,上面只是一个界面的架子,其它的东西,包括界面,可以任意
2024-06-21 10:59:20
1271
6
原创 opencv中文路径问题
其关键在于用了toLocal8Bit()的编码转化,这一个函数的解释如下:以QByteArray形式返回字符串的本地8位表示形式。如果字符串包含本地8位编码不支持的字符,则返回的字节数组是未定义的。
2024-06-18 13:53:39
741
原创 C++中extern “C“的用法
extern "C"是经常用到的东西,面试题目也经常出现,然则,实际用时,还是经常遗忘,因此,深入的了解一下,以增强记忆。extern "C"指令非常有用,因为C和C++的近亲关系。注意:extern "C"指令中的C,表示的一种编译和连接规约,而不是一种语言。C表示符合C语言的编译和连接规约的任何语言,如Fortran、assembler等。另外,extern "C"指令仅指定编译和连接规约,但不影响语义。例如在函数声明中,指定了extern “C”,仍然要遵守C++的类型检测、参数转换规则。综上所
2024-06-13 13:44:52
613
原创 c++线性关系求值
两个变量之间存在一次函数关系,就称它们之间存在线性关系。正比例关系是线性关系中的特例,反比例关系不是线性关系。更通俗一点讲,如果把这两个变量分别作为点的横坐标与纵坐标,其图象是平面上的一条直线,则这两个变量之间的关系就是线性关系。在高等数学里,线性函数是一个线性映射,是在两个向量空间之间,维持向量加法与标量乘法的映射。例如,假若,我们用坐标向量(coordinate vector来表示 与。那么,线性函数可以表达为其中, M是矩阵。线性关系,应用非常广泛,我在工作当中,就用过好多次。
2024-06-12 16:19:38
513
原创 c++分治法求峰值
分治算法分治算法是将一个规模为N的问题分解为K个规模较小的子问题;这些子问题相互独立且与原问题性质相同;求出子问题的解,就可得到原问题的解;分治法,神奇之处在于,整体与各个部分的分解方法是一样的,可以说体现了事物的普通性与特殊性的原理。这种方法,可以求解很多问题,如果你遇上一个数据量很大,并且,让你头大的问题,一般来说,用分治法,可以很简单的解决。上面的问题,如图所示:整体与部分都可以,进行同样的分解,同样的求频率最高的组,这就是最具特点的地方。
2024-06-11 16:33:16
937
原创 Qt设置进程环境变量
这虽然是一个小问题,但也是非常让人头疼,查了不少的资料,问了不少的人。从上图可知,修改系统环境变量,是一个很麻烦的事,因为,有一个单独的进程Explorer管理这一个系统环境变量,还有这么多的进程访问这一个系统环境变量,这就导致了修改和更新很麻烦,虽然通过注册表可以修改系统环境变量,但是想立即生效,却很难。
2024-06-07 17:14:26
842
原创 win7补丁下载
一般来说,安装上windows系统就带着补丁了,但有时,安装的是原始版的操作系统是不带补丁的,一般直接更新就可以了,但有时,电脑不能联网,只能通过安装包进行升级,所以下面介绍如何下载win7补丁。
2024-06-07 15:29:41
1139
Axure使用手册_设计人员使用_用于设计原型
2022-02-26
qt-C++例子1+输出HelloWorld
2024-02-22
qt-C++例子2+代码化UI设计
2024-02-23
qt-C++开发例子3-演示了元对象的用法
2024-02-23
QT+OpenCV+最简单的图片+判断灰化与二值化
2024-02-22
Qt-Qt插件技术-调用插件入门示例
2024-01-09
软件设计-工作流设计-工作流详细设计.doc
2021-12-30
项目案例-Java项目-初学者学习java-香香宠物医院.zip
2021-12-30
软件开发规范-软件工程师-国家标准-软件开发规范.zip
2021-12-30
程序员职业规划-如何成为优秀的企业人才.ppt
2021-12-31
实用工具+进制转化+十六进制数与浮点数类型的转化
2024-09-30
共享内存+信号量+Qt进程与winApi进程通信
2024-08-15
qt-QPrinter+QPainer+报表打印
2024-06-24
Qt+QWidget+界面框架-界面开发
2024-06-21
汇编编程+masm32+helloworld例子
2024-02-28
qt程序自动指定dll目录
2024-02-01
c语言命名规则1-关于下划线
2021-11-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人