- 博客(166)
- 收藏
- 关注
原创 在QtCreator中用 QListWidget + QStackedWidget 模仿vs code TabWidget
/ 自定义编辑页Q_OBJECTpublic:// 面包屑导航栏");++i) {");");// 编辑器区域// ← 这里创建对象)");} else {m_editor->setPlainText("// " + filePath + "\n// 在此编辑文件内容...\n");if (!});
2026-05-10 22:35:28
192
原创 Qt多线程编程:QThread与QtConcurrent的对比与应用
在 Qt 多线程编程中,QThread和是两种最核心的并发机制。它们分别代表了和两种不同的设计哲学。以下是两者的深度对比、适用场景分析及代码示例,帮助你根据实际需求做出最佳选择。表格startwaitquit/exitexec()run()QThread。
2026-05-02 14:10:43
503
原创 OpenCV_目标追踪
OpenCV 中的目标追踪,简单来说就是让计算机在视频的第一帧“认识”一个物体后,能在后续所有的画面中自动锁定并跟随它。这项技术广泛应用于视频监控、自动驾驶、人机交互和医疗影像分析等领域。
2026-04-12 13:35:22
218
原创 使用Python做的一个简单的人脸识别项目
人脸识别是计算机视觉的经典应用场景,OpenCV 作为开源的计算机视觉库,提供了成熟的人脸检测与识别工具链。本次笔记聚焦于基于 OpenCV 的人脸检测(Haar 级联分类器)人脸识别(LBPH 算法)完整实现,从原理、步骤到代码全覆盖,适合入门学习与实战。
2026-03-22 14:20:35
404
原创 VC++中使用GDI+自定义绘制信号灯
说明:我这里使用了信号灯来显示串口的连接状态,以及通过串口获取显示下位机的状态,使用信号灯来显示。StatusIndicatorCtrl.h 头文件。
2026-03-16 23:14:10
44
原创 Qt中使用Zint库显示二维码
于是改用VS2022创建Qt项目,然后然后添加相关的库,就能调用Zint库中的函数生成二维码了。先使用的是QtCreator 创建项目,但是会报错。好了,项目就介绍到这里了。
2026-02-25 21:29:33
126
原创 第三章 异常(一)
核心思想:将资源的释放逻辑封装到析构函数中,利用析构函数 “自动调用” 的特性,避免手动释放资源的遗漏或异常导致的泄露(RAII 原则);关键做法:不要直接管理裸资源,而是用对象(如自定义资源管理类、标准库智能指针)包裹资源,让对象的生命周期与资源绑定;实践推荐:优先使用 C++ 标准库提供的智能指针(),而非手写资源管理类,避免重复造轮子且更安全。
2026-01-18 14:14:30
1061
原创 学习OpenCVSharp(一)
简单来说,OpenCVSharp 是OpenCV(Open Source Computer Vision Library)的 .NET 版本封装库。OpenCV 本身是用 C/C++ 编写的跨平台计算机视觉库,功能极其强大,但直接在 C#、VB.NET等 .NET 语言中使用会很麻烦。
2026-01-11 23:49:52
1132
原创 第二章 操作符(Operators)(二)
短路求值丢失&&和||重载后,无论左侧结果如何,右侧表达式都会被求值,违背 C++ 原生语义,极易导致逻辑错误(比如右侧有修改变量、访问空指针等副作用时)。求值顺序失控:重载后的&&||会被当作普通函数调用,参数求值顺序由编译器决定,而非原生的 “左到右” 固定顺序,程序行为不可预测。无任何益处:重载这三个运算符无法带来任何实际好处,反而会破坏代码的可读性和行为一致性,因此建议永远不要重载它们。
2026-01-10 20:47:22
647
原创 Qt面试题合集(五)
1.定位上,STL 是 C++ 标准库,通用、跨编译器 / 平台,侧重泛型算法和容器的高效性;Qt 自定义库是 Qt 生态的一部分,为 GUI 开发量身定制,深度绑定 Qt 的信号槽、元对象系统。2.核心差异体现在内存管理(Qt 的隐式共享 / 父子对象)、编码处理(QString 原生 Unicode)、跨平台细节(Qt 封装了系统差异);3.实际项目中,Qt 项目优先用 Qt 库(如 QString/QList),能简化 GUI 相关开发;非 Qt 场景或高性能计算用 STL;
2026-01-03 11:44:27
749
原创 第二章 操作符(Operators)
核心风险:定制的类型转换函数(转换构造函数、转换运算符)会触发隐式类型转换,导致代码行为不直观、逻辑漏洞甚至编译错误;规避方案用explicit修饰单参数构造函数,禁用隐式转换;避免定义这类转换运算符,改用显式的成员函数(如toInt()toString()核心原则:除非有极强的必要性,否则尽量避免自定义隐式类型转换,让类型转换 “显式可见”,保证代码的可读性和安全性。语法区分:前置式重载无参数,后置式重载带int哑元(仅用于区分,无需使用该参数);返回值规则:前置式返回T&
2026-01-02 13:44:11
789
原创 Qt面试题合集(四)
QPainter:轻量、灵活,适合简单绘制和自定义控件:功能完整,适合复杂交互式图形应用在实际开发中,可以根据需求选择或组合使用这两种方式。例如,可以在自定义控件中使用QPainter进行绘制,而在需要管理大量交互式图形时使用Graphics View框架。
2025-12-29 23:12:08
731
原创 Qt多线程同步实战(一)
前面介绍了线程同步类,下面我们来实战一下,实现一个比较经典的多线程售票问题。简化多线程开发,无需手动管理线程和条件变量。这是在Qt 版本≥5.15,使用。
2025-12-28 18:12:09
221
原创 Qt中线程同步类介绍(一)
QMutex是基础互斥锁,提供手动加解锁能力,核心作用是保护共享资源,但需严格保证lock()unlock()成对调用;是QMutex的封装,基于 RAII 机制自动管理锁的生命周期,能避免因异常 / 提前退出导致的死锁,是 Qt 中推荐的锁使用方式;实际开发中,优先使用 QMutexLocker,仅在需要手动精细控制解锁时机时(比如临界区中间需要临时解锁)才直接用 QMutex。
2025-12-28 18:06:46
350
原创 Qt面试题合集(二)
槽函数是否立即执行,核心取决于信号槽的连接类型和信号 / 槽所在线程;同线程 + 直接连接(或默认连接)→ 立即执行;跨线程 + 队列连接(或默认连接)→ 异步执行;默认连接(AutoConnection)是最优选择,Qt 会自动适配线程场景,避免手动指定连接类型的错误自定义事件类,子线程发送事件,主线程重写event()处理 UI:(较少用,适合复杂场景)底层操作系统 GUI 库线程不安全,且 Qt UI 组件未做线程安全保护;将 UI 操作委托给主线程执行,推荐用。
2025-12-14 15:06:20
971
原创 Qt面试题合集(一)
Qt 对象树的核心目的是自动化管理 GUI 组件的内存,解决手动管理内存易出现的泄漏、野指针问题;同时实现了组件父子关系的联动(显示、事件、生命周期),适配 GUI 编程的场景特点;本质是将 GUI 组件的 “父子逻辑” 和 “内存生命周期” 绑定,大幅降低开发者的编程成本和出错概率。的核心作用是查询当前对象在对象树中的父对象指针,是 “子查父” 的核心接口;它不仅用于验证对象树关系,还能辅助获取父对象上下文、实现递归遍历、验证内存管理逻辑;注意parent()返回的是基类指针,需通过。
2025-12-14 15:05:22
652
原创 QScrollArea类和QSroller类的简单介绍
如果内容是自定义绘制(而非子部件),可继承QWidget重写paintEvent// 自定义绘制的内容部件protected:// 绘制大量内容(超出视口)i < 50;++i) {painter.drawText(10, 20 + i*30, QString("自定义绘制行 %1").arg(i+1));// 使用// 固定内容大小(超出滚动区域)类适用场景核心优势基础滚动需求(如固定内容、简单滚动)易用、内置滚动条、支持任意部件QScroller。
2025-12-09 23:19:52
860
1
原创 学习OpenCV(2)--- 图像基础容器Mat
Mat是一个类,由两个部分组成:①矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)。②一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。矩阵头的尺寸是常数值,但矩阵本身尺寸会依图像的不同而不同,通常比矩阵头的尺寸大数个数量级。OpenCv使用了引用计数机制。其思路是让每一个Mat对象有自己的信息头,但共享同一个矩阵。这通过让矩阵指针指向同一地址而实现。
2025-12-07 14:10:56
979
原创 Qt 小结
编译64位的Qt程序,但是用32位的MinGW cmd.exe的Windeployqt命令时,直接报错,我去MSVS构建套件下没有找到cmd.exe?!另外cmd.exe,它只用系统自带的;你要的是,而不是cmd.exe。
2025-11-26 23:17:46
476
原创 C#中并发集合---线程安全但无需加锁的高性能结构
C#中并发集合他们分别是ConCurrentQueue、ConcurrentDictionary、BlockingConllection。并发集合内部用,比你自己写 lock。下面我们来说别介绍他们。
2025-11-24 23:31:23
645
原创 MOTT简介
MQTT(Message Queuing Telemetry Transport)是一种轻量级的,专为设计,广泛应用于、移动应用、小型设备等领域。
2025-11-19 23:09:32
1081
原创 MFC中使用GDI+ 自定义等待界面
在工作中我们总是会遇到等待任务完成的场景,我们可以设置Windows自带的鼠标光标是等待的,沙漏(⏳),今天介绍使用GDI+在MFC程序中自定义简单的等待界面。
2025-11-15 15:04:46
498
原创 在Qt中使用QCustomPlot库
QCustomPlot是一个用于Qt应用程序中绘制高质量图表和图形的开源C++库,其提供了一个易于使用的API,允许开发人员创建各种类型的图表,如线图、散点图、柱状图、饼图等。以上就是在Qt中简单使用QCustomPlot的示例。
2025-11-02 15:41:32
379
原创 Qt中使用图表库
QChart 是 Qt Charts 模块的核心类,用于在 Qt 应用中创建和管理 2D 图表。它提供了一套高层次的 API,支持折线图、柱状图、饼图、散点图等多种常见图表类型,并内置了图例、坐标轴、动画、缩放、平移等交互功能。:作为 Qt 官方模块,QChart 与 Qt Widgets 和 Qt Quick 无缝结合,只需在。:支持 Windows、macOS、Linux 及嵌入式平台,保证一致的显示与交互效果。:内置缩放、平移、数据提示、主题切换及动画效果,无需额外开发即可实现专业级可视化体验。
2025-11-01 11:20:48
909
原创 Qt中使用C++日志库
什么是 Spdlog 日志库Spdlog 是一个 C++ 的日志库,它具有高效、易用、跨平台等特点。它可以写入到控制台、文件等输出目标,支持多种日志级别、多线程安全等功能,非常适合在 C++ 项目中使用。Spdlog。
2025-10-26 10:46:09
531
原创 Qt中使用日志---Log4Qt
首先需要去官方网站下载LoganQt库。可以从两个地方去下载Log4Qt库。1.2.下载完成后,解压出来,然后把Src文件夹复制到自己的项目中。
2025-10-03 14:25:30
681
原创 C# MVVM模式和Qt中MVC模式的比较
包含数据呈现逻辑(如 display role, edit role)继承自 QAbstractItemModel。需要实现特定的接口供视图调用。对视图有一定程度的认知。
2025-09-28 23:19:07
1055
原创 C#中MVVM模式的介绍
MVVM 是的缩写,它是一种专门为构建数据绑定友好的应用程序而设计的软件架构模式。其核心思想是“关注点分离”,将用户界面逻辑与业务逻辑分离开来,使代码更易于维护、测试和理解。MVVM 源自于经典的 MVC 和 MVP 模式,但通过数据绑定机制,极大地减少了 View 和 ViewModel 之间的“胶水代码”。MVVM 是构建复杂、可维护和可测试的 XAML 应用程序的黄金标准。它通过数据绑定将 View 和 ViewModel 解耦,使得开发流程更加清晰和高效。
2025-09-27 23:38:06
996
原创 设计模式的几个准则
摘要:C++设计模式遵循四大核心准则:1)开闭原则(对扩展开放,对修改关闭),通过抽象类和多态实现;2)依赖倒置原则(依赖抽象而非具体实现),使用接口隔离依赖;3)单一职责原则(每个类只负责单一功能),拆分多功能类为多个单一职责类;4)接口隔离原则(避免实现不需要的接口),将大接口拆分为多个小接口。这些准则共同提升了代码的可维护性、扩展性和灵活性。
2025-09-23 22:26:02
344
原创 MFC中的CMFCDynamicLayout类的介绍
Visual Studio 2015以后,MFC增加了一个叫做CMFCDynamicLayout的类,来处理画面上这些需要自适应大小的控件。MFC想要实现对话框中窗口拖拽时自动改变控件的位置和大小,在Visual Studio 2015之前只能自己写方法进行计算。添加完后,需要设置对话框的属性是Resizing属性。可以使用该类来实现界面控件跟随对话框大小改变而改变。首先新建工程:,我在我之前的工程中使用该类。更多使用方法可以参考微软官方。1.首先需要包含头文件。
2025-09-21 23:46:55
572
原创 MFC中开源布局库---ResizableLib
第一步:包含库中的头文件ResizableDialog.h,并且让对话框继承自库中的类:CResiableLibDialog。在工作中遇到了需要使用界面布局的问题。自己布局的话是比较麻烦的,于是网上搜索之后,发现了一个比较牛逼的MFC布局库。第二步:调用AddAnchor,为每一个控件设置布局描点。它通过为控件设置描点,来实现布局的。
2025-09-20 17:14:36
429
转载 详解 C# 与 C++ 平台调用(PInvoke)时的数据类型对应关系
++在互操作时,会涉及到数据类型对应的问题,如果数据类型用得不对,就会得不到想要的结果,严重的情况下,可能还会导致程序崩溃。使用C[#读出](由于在写入Point数据时,指针的位置已经不是当初映射出来的起点了,要偏移,就需要使用指针)在公众号看到大佬的文章,在自己工作中需要用到,于是就直接转载下来,方便后续使用。当需要传递自定义结构时,需要在 C# 中定义一个与之布局完全一致的结构体。类,但是如果需要进行指针偏移,就一定要用指针类型,而不是。使用C++创建共享内存并写入数据(示例代码,仅供参考)
2025-09-17 23:39:58
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅