自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Qt 无边框窗口进阶指南

本文深入解析了 Qt 环境下无边框窗口的完整实现方案。针对无边框窗口移除系统标题栏后引发的拖动、拉伸等核心痛点,重点讲解了如何借助 Win32 API 与 Windows 消息机制(WM_NCHITTEST、WM_NCCALCSIZE)进行系统级处理,实现流畅的窗口移动、精准的尺寸调整以及“置顶全屏”等特殊交互模式。文章提供了详尽的代码示例,并通过对比 Qt 原生方案与系统级实现的差异,揭示了 Win32 消息机制在桌面开发中的独特价值,为构建现代化、高性能的桌面应用提供了可靠的技术参考。

2026-08-25 14:49:25 237

原创 海外CMS系统中的RTL字符显示问题

本文总结了CMS系统在海外版本RTL(从右向左)语言环境下的金额显示问题及解决方案。由于Unicode双向文本算法会影响货币符号的位置,导致配置前置的货币符号被自动后置。通过插入LRM/RLM控制字符主动干预文本方向,同时在需要固定文本组合的场景使用LRE/PDF控制字符,彻底解决了UI、票据和Excel导出中的金额显示问题,为国际化适配提供了实践经验。

2026-08-22 08:15:15 335

原创 QBasicTimer vs QTimer —— 选择正确的计时器

这篇博客对比了QBasicTimer与QTimer的适用场景和性能,指出QBasicTimer更高效但API较底,QTimer更便捷但开销略高。文中澄清了两大误区:QBasicTimer同样能使用lambda,且也支持跨线程(需配合事件和线程)。通过实际案例演示了在实时性要求高的场景下选用QBasicTimer,并验证了其在高频任务中的性能优势。结论是:追求快速开发用QTimer,追求极致性能用QBasicTimer。

2026-08-21 16:46:51 336

原创 QCustomPlot的使用介绍

本文介绍了在Qt开发中使用QCustomPlot库实现高性能数据可视化的经验。针对道路车流数据可视化大屏项目中QChart性能不足的问题,通过改用QCustomPlot库成功解决了大数据量实时刷新的性能瓶颈。文章详细对比了QCustomPlot与QChart的性能差异,并提供了完整的折线图实现代码示例,包括数据绑定、样式设置、交互功能(点击显示数值、右键导出图片)等核心功能。同时总结了常见图表类型(折线图、散点图、柱状图等)的绘制方法和注意事项,特别强调了大数据量场景下的性能优化技巧。该方案已在实际项目中验

2026-05-13 16:42:50 544

原创 OpenCv中基础图形的绘制

OpenCV提供了一套高效的2D图形绘制API,包括直线(cv::line)、矩形(cv::rectangle)、圆形(cv::circle)、椭圆(cv::ellipse)、多边形(cv::polylines/fillPoly)和文本(cv::putText)等基础绘图函数。这些函数支持设置颜色、线宽、线条类型等参数,其中thickness=-1可实现填充效果。绘图函数广泛应用于目标检测可视化、特征点标记、图像调试等场景,通过rectangle绘制目标框、putText标注信息、circle标记关键点等操

2026-03-20 20:23:21 462

原创 OpenCv之图像的仿射和透视变化

本文介绍了OpenCV中的仿射变换和透视变换技术。仿射变换通过2×3矩阵实现平移、旋转、缩放等线性变换,保持平直性和平行性,常用函数包括warpAffine()和getRotationMatrix2D()。透视变换利用3×3单应性矩阵实现三维到二维的投影变换,常用于文档矫正和视角转换,核心函数是warpPerspective()和getPerspectiveTransform()。两种变换在图像校正、数据增强、AR应用等领域具有重要作用,文中通过二维码矫正等实例展示了具体应用方法。

2026-03-18 22:57:58 566

原创 OpenCv之图像缩放翻转和拼接

本文介绍了图像处理中的基本操作原理及实现方法。图像插值算法是缩放和旋转的基础,包括最近邻、线性、双线性、双三次和Lanczos插值,各有优缺点和适用场景。双线性插值是OpenCV默认方法,通过二维线性加权计算非整数坐标像素值。图像缩放使用cv::resize()函数,可通过指定尺寸或比例实现。图像翻转通过cv::flip()实现水平、垂直或同时翻转。图像拼接使用hconcat()和vconcat()函数,要求输入图像具有相同的高度或宽度。最后给出了包含缩放、翻转和拼接操作的代码示例,展示了这些基本图像处理技

2026-03-16 22:47:24 588

原创 OpenCv之查表法LUT

摘要:本文介绍了LUT(查表法)在图像处理中的应用。LUT通过预定义映射表实现像素值的快速转换,支持单通道或多通道独立处理。核心应用包括:1)色彩校正与滤镜效果;2)图像增强与缺陷检测;3)动态范围压缩(伪彩色成像);4)实时二值化处理。文中提供了过曝光修复和复古滤镜两个实例,展示了如何通过构建对数变换、伽马校正等LUT表实现高效图像处理。该方法计算速度快,适合工业视觉和实时处理场景。

2026-03-13 22:19:29 685

原创 OpenCv之图像二值化

本文介绍了图像二值化的核心概念及OpenCV中的实现方法。二值化是将灰度图像转换为纯黑白图像的过程,通过设定阈值区分前景和背景。OpenCV提供固定阈值二值化(cv::threshold)和自适应阈值二值化(cv::adaptiveThreshold)两种主要方法,其中固定阈值法又包含手动设定和自动计算最优阈值(Otsu/三角法)两种方式。文章详细说明了各方法的函数参数和使用场景,并通过测试代码展示了不同方法在lean图和文档处理中的效果对比,包括THRESH_BINARY、THRESH_OTSU和ADAP

2026-03-09 23:20:08 543

原创 OpenCv之两图像像素操作与运算

本文介绍了OpenCV中常用的图像处理函数及其应用场景。主要内容包括:1) 逐像素比较函数cv::min()和cv::max(),用于图像融合、降噪、亮度调整和区域提取;2) 极值查找函数cv::minMaxLoc(),用于分析图像亮度、定位目标和验证分割结果;3) 像素位运算函数bitwise_and/or/not/xor,实现图像反色、掩膜抠图、区域合并和差异检测等操作。文中通过具体代码示例展示了这些函数在噪声抑制、亮度调整、水印添加等实际应用中的使用方法,为图像处理提供了多种实用技术方案。

2026-03-08 11:56:02 430

原创 OpenCv之多通道的分离与合并

本文介绍了OpenCV中多通道图像处理的基本操作。主要内容包括:1)使用cv::split()函数实现多通道分离;2)使用cv::merge()函数进行通道合并;3)通过代码示例展示如何单独处理蓝色通道;4)演示红色通道增强方法;5)基于HSV色彩空间的图像处理,包括饱和度增强和色调替换。文章重点讲解了在BGR和HSV色彩空间下进行通道分离、修改和合并的技术细节,并提供了完整的代码实现,帮助读者掌握图像通道处理的实用技巧。

2026-03-07 12:22:53 246

原创 OpenCv之图像颜色空间介绍

本文介绍了OpenCV中常用的颜色模型及其转换方法。主要内容包括:1)RGB颜色模型,重点说明OpenCV默认使用BGR顺序及转换方法;2)HSV颜色模型的特性及其在视觉感知上的优势;3)灰度模型的工业应用场景;4)颜色空间转换函数cvtColor()的使用方法和常见转换示例。文章详细讲解了不同数据类型间的转换公式和参数设置,并提供了实际代码示例,帮助理解如何在RGB、HSV和灰度模型间进行转换,以及如何处理不同库之间的颜色顺序差异。

2026-02-12 08:53:54 893

原创 OpenCv中图像I/O和显示

本文摘要: OpenCV图像与视频处理基础教程包含四部分内容:1)图像处理:详细介绍imread()读取、namedWindow()创建窗口、imshow()显示和imwrite()保存图像的方法;2)调试工具:推荐使用ImageWatch插件进行高效调试;3)视频处理:讲解VideoCapture读取视频/摄像头、VideoWriter写入视频以及视频属性获取方法;4)代码示例:提供完整的图像加载显示、视频播放和摄像头采集保存的代码实现。教程涵盖了OpenCV中最基础的I/O操作,包括参数说明、注意事项和

2026-02-11 09:10:30 1076

原创 OpenCv中的Mat容器

OpenCV中的Mat类是用于存储矩阵数据的核心数据结构,代表图像和矩阵。它支持多种数据类型(CV_8U、CV_32F等)和构造方式(空矩阵、指定尺寸、深/浅拷贝等)。Mat类提供多种像素访问方法(at<>()、指针访问等)和矩阵运算功能(加减乘除、转置、求逆等)。Scalar类用于初始化矩阵和传递多值参数。Mat对象可通过rows、cols获取尺寸,支持通道拆分/合并等操作。矩阵运算需注意数据类型和尺寸匹配,逐元素操作与线性代数运算的区别。该数据结构是OpenCV图像处理的基础,灵活高效地支持

2026-02-10 23:27:22 972

原创 OpenCV下载和环境搭建

本文介绍了OpenCV的安装配置及基础使用方法。主要内容包括:1)OpenCV的下载步骤;2)库目录和环境变量配置方法;3)Visual Studio中的配置过程;4)提供了一个基础图像读取和显示的示例代码,演示如何通过imread()加载图像、imshow()显示图像以及waitKey()等待用户输入。该示例展示了OpenCV最基本的图像处理功能,为后续开发奠定基础。

2026-02-10 20:54:42 276

原创 项目国际化中QLocale的使用

本文介绍了Qt框架中QLocale模块在停车收费软件国际化中的应用。针对不同国家地区在货币、数字和时间格式上的差异,通过LocalManager单例类封装QLocale功能,实现了多国本地化支持。重点解决了时间显示受操作系统时区影响的问题,提出使用固定英语区域格式化的解决方案。文章包含完整的代码实现,展示了价格格式化、时间转换等核心功能,为跨地区软件开发提供了实用参考。

2025-11-24 15:01:41 254

原创 项目开发中QTest单元测试的使用

本文介绍了Qt测试框架QTest在GUI项目中的应用优势及其核心功能。针对Qt深度集成的项目,QTest相比GoogleTest在GUI测试方面更高效,支持轻量化宏驱动和数据驱动测试。文章详细说明了QTest的断言宏、数据驱动测试宏(addColumn/newRow/QFETCH)、GUI交互模拟宏(键盘鼠标操作)以及性能测试宏(QBENCHMARK)的使用方法,并提供了一个完整的测试类实现示例,展示如何测试计算器功能,包括数据驱动测试、信号验证和GUI交互测试。最后通过QTEST_MAIN宏简化测试执行流

2025-11-22 10:50:28 890 3

原创 托盘程序在实际项目中的应用

本文介绍了在停车场项目中运用系统托盘功能的实现方法。通过Qt的QSystemTrayIcon类,可以方便地创建托盘图标,实现最小化到托盘而非退出的功能。文章详细说明了图标控制、提示信息、消息通知和右键菜单等核心功能,并提供了代码示例。在实际应用中,通过拦截关闭事件实现窗口隐藏到托盘,同时支持双击唤醒主界面。该方案有效解决了后台程序运行期间界面干扰问题,特别适合需要长期运行的服务类应用程序。

2025-11-03 14:41:24 975

原创 QGraphicsEffect控件添加特效

本文介绍了Qt中的QGraphicsEffect图形效果框架及其常见子类的应用。QGraphicsEffect作为基类,可在不改变控件几何结构的情况下实现阴影、模糊、着色和透明度等视觉效果。具体讲解了四种常用子类:QGraphicsDropShadowEffect设置阴影效果,QGraphicsBlurEffect实现高斯模糊,QGraphicsColorizeEffect用于整体着色,以及QGraphicsOpacityEffect控制透明度。文中提供了详细的代码示例,包括参数设置说明和与QPropert

2025-10-28 17:58:54 611

原创 音视频开发SDL概述(三)

本文介绍了使用SDL库播放音频的基本流程。首先概述SDL作为跨平台多媒体开发库的功能特点,然后详细说明播放音频的步骤:1)初始化SDL音频子系统;2)配置SDL_AudioSpec参数包括采样率、声道数等;3)实现音频回调函数处理数据填充;4)打开音频设备并开始播放。重点讲解了音频回调函数的实现机制,包括缓冲区管理、数据解码和混音处理。最后给出了一个完整的音频播放示例代码,展示如何结合FFmpeg解码音频帧并通过SDL进行播放。文章为多媒体开发者提供了SDL音频播放的实用指南。

2025-08-29 11:23:00 851

原创 FFmpeg的基本概述(二)

FFmpeg是一个开源的音视频处理框架,包含libavformat、libavcodec等核心模块,支持多种编解码器。其视频解码流程包括:注册组件、打开输入文件、获取视频信息、查找解码器、读取数据包、解码帧数据、格式转换和渲染。关键结构体包括AVFormatContext、AVPacket、AVFrame等,通过函数如avformat_open_input()、avcodec_send_packet()等实现解码功能。解码完成后需释放相关资源,如使用av_frame_free()等函数。FFmpeg提供强大

2025-08-20 16:17:02 434

原创 音视频开发基本概念(一)

本文系统介绍了音视频技术的基本概念和原理。主要内容包括:1)视频基础概念,如码率、帧率、分辨率、编解码器、I/P/B帧等;2)色彩空间,重点讲解RGB和YUV格式及其转换方法;3)音频基础,包括采样率、比特率、声道数等概念;4)常见封装格式如MP4、FLV等;5)音视频同步原理及时间戳机制。文章深入浅出地阐述了音视频从采集、编码到存储播放的全流程技术要点,为理解多媒体处理提供了全面的基础知识框架。

2025-07-31 10:48:42 975

原创 项目优化中对象的隐式共享

本文介绍了Qt框架中通过继承QSharedData实现自定义数据隐式共享的方法。Qt内置类型如QString采用隐式共享技术(读时共享,写时复制)提升性能和内存效率。开发者可让自定义类继承QSharedData,并用QSharedDataPointer管理数据,实现类似特性。文章详细展示了PersonData类的实现过程,包括数据定义、指针管理和测试用例,并对比了与std::shared_ptr的区别。最后总结了Qt隐式共享的优势:提升内存效率、优化性能、简化API,并给出了实际开发中的使用建议。

2025-07-29 16:22:04 219

原创 Qt WebEngine Widgets的使用

Qt WebEngine中主要分为三个模块:Qt WebEngine Widgets模块,主要用于创建基于C++ Widgets部件的Web程序;Qt WebEngine模块用来创建基于Qt Quick的Web程序;Qt WebEngine Core模块用来与Chromeium交互。网页玄幻和JavaScript的执行从GUI进程分离到Qt WebEngine进程,主要架构如下。​​​​​​

2025-07-24 19:30:45 713 1

原创 静态库和动态库的创建和调用方法

本文系统介绍了静态库和动态库的开发与应用。首先分析了C++程序构建的四个核心阶段(预处理、编译、链接、运行),详细对比了静态库和动态库在构建过程、内存使用、部署维护等方面的差异。然后通过具体案例演示了Windows平台下静态库(.lib)和动态库(.dll)的创建、使用及发布流程,包括三种动态库调用方式(隐式链接、显式链接、Qt封装)。针对跨编译器兼容性问题,深入探讨了调用约定(__stdcall/__cdecl)、链接规范(extern "C")和导出导入机制(__declspec)的

2025-07-19 08:47:11 449

原创 项目优化之开机自启动

摘要:本文介绍了在Windows系统中实现Qt程序开机自启动的方法。通过修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run路径实现自启动功能,并提供了使用QSettings操作注册表的具体代码示例。文章还强调了需要管理员权限才能访问注册表,以及在64位系统上32位程序可能遇到的注册表重定向问题。该方案特别适用于无人值守的停车管理系统等需要自动恢复运行的场景。

2025-07-18 13:57:38 433

原创 对象创建控制

在实际项目中对于一些对象需要在栈上创建,避免在堆上创建引起不要的内存泄露风险;同时一些对象由于生命周期在整个软件运行期,不适合在栈上创建只能在堆上创建;以下针对两种情况进行阐述和代码实践。

2025-07-17 10:33:56 231

原创 项目中PostGreSql数据库的维护

实际交通项目中PostGreSql数据库中的车辆相关数据每天不断更新增加,长此以往数据库的查询插入更新等效率会逐渐增加,相关数据库操作的TimeBenck也会频频爆出耗时日志。除此之外磁盘存储的坏道,数据的丢失,索引的损坏,数据库的断电崩溃等等也会引起数据库连接问题,对于一些大型商业停车场会带来较大的损失。以下记录实际中常用的一些排查维护方法。

2025-06-19 16:14:35 1123

原创 项目开发中一些python测试脚本

在实际项目开发中由于排期和开发进度等和不具备测试环境等原因需要单独进行模拟测试;此时python撰写脚本进行测试环境模拟是一种比较方便的方式。以下是一些测试中常用的脚本总结。

2025-06-13 16:53:42 191

原创 MVC框架在项目数据处理中的应用

本文介绍了MVC(Model-View-Controller)架构及其在Qt框架中的实现。MVC将数据与界面分离,Qt4引入的model/view架构简化了这一模式,通过模型索引访问数据,并使用委托处理用户输入和自定义渲染。文章详细说明了模型、视图和委托的交互方式,以及如何通过QAbstractItemModel和QAbstractItemView实现标准化接口。最后,以员工管理系统为例,展示了如何通过自定义委托(如SpinBoxDelegate和ComBoxDelegate)实现不同视图(列表、表格、树形

2025-05-06 17:11:11 200

原创 项目优化之串口通信

打个标,待整理。。。

2025-04-17 23:44:59 169

原创 项目优化中ini配置文件解析器

在停车管理项目中不同道闸口的终端配置可能不同,如靠近居民楼的道闸终端LED的语音播报音量和靠近马路的道闸门口不同;不同终端道闸锁闸时间也可能不同,诸如此类放在数据库中,不同的终端在启动时必须先连接到数据库才能加载,远没有本地配置文件方便,也不如配置文件方便技术支持修改方便,对于此类本地化配置的参数需要进行提取改写到本地配置文件中。

2025-04-17 23:42:20 776

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

待续。

2025-03-21 16:55:12 156

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

待续。

2025-03-21 16:52:05 378

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

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

2025-03-21 16:50:36 486

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

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

2025-03-05 23:10:15 129

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

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

2025-03-05 23:06:05 1367

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

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

2025-02-22 23:16:32 1517

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

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

2025-02-21 17:07:08 1278

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

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

2025-02-20 16:18:34 1672

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

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

2017-05-30

空空如也

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

TA关注的人

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