- 博客(112)
- 资源 (1)
- 收藏
- 关注
原创 项目国际化中QLocale的使用
QLocale是 Qt 框架中用于实现国际化和本地化的核心类,它定义了用户所在区域的特定文化规则,确保应用程序能以符合用户习惯的方式展示数字、日期、货币等信息,以下是货币和时间等本地化代码。
2025-11-24 15:01:41
83
原创 项目开发中QTest单元测试的使用
本文介绍了Qt测试框架QTest在GUI项目中的应用优势及其核心功能。针对Qt深度集成的项目,QTest相比GoogleTest在GUI测试方面更高效,支持轻量化宏驱动和数据驱动测试。文章详细说明了QTest的断言宏、数据驱动测试宏(addColumn/newRow/QFETCH)、GUI交互模拟宏(键盘鼠标操作)以及性能测试宏(QBENCHMARK)的使用方法,并提供了一个完整的测试类实现示例,展示如何测试计算器功能,包括数据驱动测试、信号验证和GUI交互测试。最后通过QTEST_MAIN宏简化测试执行流
2025-11-22 10:50:28
548
3
原创 托盘程序在实际项目中的应用
本文介绍了在停车场项目中运用系统托盘功能的实现方法。通过Qt的QSystemTrayIcon类,可以方便地创建托盘图标,实现最小化到托盘而非退出的功能。文章详细说明了图标控制、提示信息、消息通知和右键菜单等核心功能,并提供了代码示例。在实际应用中,通过拦截关闭事件实现窗口隐藏到托盘,同时支持双击唤醒主界面。该方案有效解决了后台程序运行期间界面干扰问题,特别适合需要长期运行的服务类应用程序。
2025-11-03 14:41:24
903
原创 QGraphicsEffect控件添加特效
本文介绍了Qt中的QGraphicsEffect图形效果框架及其常见子类的应用。QGraphicsEffect作为基类,可在不改变控件几何结构的情况下实现阴影、模糊、着色和透明度等视觉效果。具体讲解了四种常用子类:QGraphicsDropShadowEffect设置阴影效果,QGraphicsBlurEffect实现高斯模糊,QGraphicsColorizeEffect用于整体着色,以及QGraphicsOpacityEffect控制透明度。文中提供了详细的代码示例,包括参数设置说明和与QPropert
2025-10-28 17:58:54
479
原创 音视频开发SDL概述(三)
本文介绍了使用SDL库播放音频的基本流程。首先概述SDL作为跨平台多媒体开发库的功能特点,然后详细说明播放音频的步骤:1)初始化SDL音频子系统;2)配置SDL_AudioSpec参数包括采样率、声道数等;3)实现音频回调函数处理数据填充;4)打开音频设备并开始播放。重点讲解了音频回调函数的实现机制,包括缓冲区管理、数据解码和混音处理。最后给出了一个完整的音频播放示例代码,展示如何结合FFmpeg解码音频帧并通过SDL进行播放。文章为多媒体开发者提供了SDL音频播放的实用指南。
2025-08-29 11:23:00
763
原创 FFmpeg的基本概述(二)
FFmpeg是一个开源的音视频处理框架,包含libavformat、libavcodec等核心模块,支持多种编解码器。其视频解码流程包括:注册组件、打开输入文件、获取视频信息、查找解码器、读取数据包、解码帧数据、格式转换和渲染。关键结构体包括AVFormatContext、AVPacket、AVFrame等,通过函数如avformat_open_input()、avcodec_send_packet()等实现解码功能。解码完成后需释放相关资源,如使用av_frame_free()等函数。FFmpeg提供强大
2025-08-20 16:17:02
397
原创 音视频开发基本概念(一)
本文系统介绍了音视频技术的基本概念和原理。主要内容包括:1)视频基础概念,如码率、帧率、分辨率、编解码器、I/P/B帧等;2)色彩空间,重点讲解RGB和YUV格式及其转换方法;3)音频基础,包括采样率、比特率、声道数等概念;4)常见封装格式如MP4、FLV等;5)音视频同步原理及时间戳机制。文章深入浅出地阐述了音视频从采集、编码到存储播放的全流程技术要点,为理解多媒体处理提供了全面的基础知识框架。
2025-07-31 10:48:42
839
原创 项目优化中对象的隐式共享
本文介绍了Qt框架中通过继承QSharedData实现自定义数据隐式共享的方法。Qt内置类型如QString采用隐式共享技术(读时共享,写时复制)提升性能和内存效率。开发者可让自定义类继承QSharedData,并用QSharedDataPointer管理数据,实现类似特性。文章详细展示了PersonData类的实现过程,包括数据定义、指针管理和测试用例,并对比了与std::shared_ptr的区别。最后总结了Qt隐式共享的优势:提升内存效率、优化性能、简化API,并给出了实际开发中的使用建议。
2025-07-29 16:22:04
188
原创 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
596
1
原创 静态库和动态库的创建和调用方法
在移动交通项目上有许多设备需要使用,如在高速收费站往往需要多目相机、ETC、电子地秤和道闸等等设备,上层软件往往需要集成这些设备进行收费站软件项目方案的集成,每个地区指定的方案不同,采购的设备类型和指定的厂商往往不同,但是作为供应商针对不同的地区要求需要做好设备的接口适配这些需求,其中最常见的即采用动态库或静态库,通过上层软件指定的接口协议对设备功能进行封装,同时配合上层软件调试达成项目目的。
2025-07-19 08:47:11
370
原创 项目优化之开机自启动
摘要:本文介绍了在Windows系统中实现Qt程序开机自启动的方法。通过修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run路径实现自启动功能,并提供了使用QSettings操作注册表的具体代码示例。文章还强调了需要管理员权限才能访问注册表,以及在64位系统上32位程序可能遇到的注册表重定向问题。该方案特别适用于无人值守的停车管理系统等需要自动恢复运行的场景。
2025-07-18 13:57:38
386
原创 对象创建控制
在实际项目中对于一些对象需要在栈上创建,避免在堆上创建引起不要的内存泄露风险;同时一些对象由于生命周期在整个软件运行期,不适合在栈上创建只能在堆上创建;以下针对两种情况进行阐述和代码实践。
2025-07-17 10:33:56
203
原创 项目中PostGreSql数据库的维护
实际交通项目中PostGreSql数据库中的车辆相关数据每天不断更新增加,长此以往数据库的查询插入更新等效率会逐渐增加,相关数据库操作的TimeBenck也会频频爆出耗时日志。除此之外磁盘存储的坏道,数据的丢失,索引的损坏,数据库的断电崩溃等等也会引起数据库连接问题,对于一些大型商业停车场会带来较大的损失。以下记录实际中常用的一些排查维护方法。
2025-06-19 16:14:35
1053
原创 项目开发中一些python测试脚本
在实际项目开发中由于排期和开发进度等和不具备测试环境等原因需要单独进行模拟测试;此时python撰写脚本进行测试环境模拟是一种比较方便的方式。以下是一些测试中常用的脚本总结。
2025-06-13 16:53:42
134
原创 MVC框架在项目数据处理中的应用
本文介绍了MVC(Model-View-Controller)架构及其在Qt框架中的实现。MVC将数据与界面分离,Qt4引入的model/view架构简化了这一模式,通过模型索引访问数据,并使用委托处理用户输入和自定义渲染。文章详细说明了模型、视图和委托的交互方式,以及如何通过QAbstractItemModel和QAbstractItemView实现标准化接口。最后,以员工管理系统为例,展示了如何通过自定义委托(如SpinBoxDelegate和ComBoxDelegate)实现不同视图(列表、表格、树形
2025-05-06 17:11:11
152
原创 项目优化中ini配置文件解析器
在停车管理项目中不同道闸口的终端配置可能不同,如靠近居民楼的道闸终端LED的语音播报音量和靠近马路的道闸门口不同;不同终端道闸锁闸时间也可能不同,诸如此类放在数据库中,不同的终端在启动时必须先连接到数据库才能加载,远没有本地配置文件方便,也不如配置文件方便技术支持修改方便,对于此类本地化配置的参数需要进行提取改写到本地配置文件中。
2025-04-17 23:42:20
709
原创 Qt图形视图框架在项目中的应用
Qt图形试图框架是Qt库中用于创建2D图形用户界面的模块。它提供了丰富的绘图功能,支持绘制形状、文本、图像以及处理复杂的图形效果。通过使用Qt Graphics View框架,开发者可以构建交互式和动态的图形应用程序,如绘图软件、地图应用和数据可视化工具等。
2025-03-21 16:50:36
387
原创 提升客户端程序性策略
在停车项目中随着过车的增加,程序运行时间的累积,程序可能会越来越慢,降低过车效率,针对此进行一些优化,先打个标记待后续空闲进行记录。
2025-03-05 23:10:15
101
原创 C++ 内存序在多线程中的使用
C++11中的内存序(Memory Order)为开发者提供了工具,帮助控制多线程程序中不同线程之间的内存操作顺序,从而避免由于编译器或处理器优化导致的指令重排问题。这些内存序提供了从无序到严格一致的内存访问保证,让程序员能够在性能和安全性之间进行权衡。本文将详细介绍C++中的六种内存序,并通过实际例子补充说明它们的应用场景。
2025-03-05 23:06:05
1294
原创 提升C++项目编译速度
提高程序编译效率一方面从代码文件管理方面不断降低不同文件之间的依赖关系,另外一方面从代码的业务层面剥离剧烈变动的业务逻辑和相对稳固的代码框架,尽可能的将变化部分小范围可控,尽可能的降低耦合度,这方面设计模式的使用是一个不错的选择。此外一些编译器上的配置如开启多核编译等以及一些加速编译的工具也有一定的效果,此处不详谈这方面。https://blog.youkuaiyun.com/WSTONECH/article/details/143989953文章浏览阅读282次。
2025-02-22 23:16:32
1342
原创 QSplashScreen --软件启动前的交互
QSplashScreen 是 Qt 中的一个类,用于显示启动画面。它通常在应用程序启动时显示,以向用户显示应用程序正在启动的状态。启动画面可以是一个图片,也可以是一个包含了文本、图片等内容的窗口。//slots//protected 可以继承自绘。
2025-02-21 17:07:08
1152
原创 Qt程序退出相关资源释放问题
通过重写主界面的这个函数可在窗口关闭前执行一些自定义的操作,比如询问用户是否真的要关闭窗口,或者保存未保存的数据。如果该窗口是主窗口,且所有子窗口都已关闭,应用程序会退出,退出前会触发和aboutToQuit信号。• 当调用quit()时,它会退出主事件循环,触发QApplication::exec()返回,并关闭所有打开的窗口。• quit()通常用于在应用程序中实现“退出”功能,比如在菜单项的“退出”操作上绑定这个函数。• close()适用于关闭单个窗口或控件的场景,比如“关闭”按钮的操作。
2025-02-20 16:18:34
1450
原创 CRTP在项目优化中的使用
CRTP 全称,即奇异递归模板模式。是一种 C++ 编程技巧,使用模板类和继承的组合来实现。该模式的关键思想是:在模板类的定义中,模板参数是当前类自身(通常是派生类)。这个技巧通常用于实现编译时多态,优化性能,C++中std:: enable_shared_from_this 也是一种CRTP的实践。。
2025-02-19 21:45:26
923
原创 PostgreSql数据库执行统计
在实际项目中为了确保软件长时间正常运行,监控数据库的执行情况非常有必要,这个扩展可以帮助你识别最频繁运行的查询、哪些查询消耗的时间最长,以及系统的整体工作量,从而对性能瓶颈进行诊断和优化。PostgreSql的pg_stat_statements插件提供一种方法追踪一个服务器所执行的所有 SQL 语句的执行统计信息,可以用于统计数据库的资源开销,分析TOP SQL。
2025-02-17 16:48:21
296
原创 内存池和对象的使用
Boost.Pool 包含一些用于管理内存的类。虽然 C++ 程序通常用于 new 动态分配内存,但内存提供方式的详细信息取决于标准库的实现和操作系统。例如,使用 Boost.Pool,您可以加速内存管理,从而更快地为程序提供内存。Boost.Pool 不会更改操作系统的行为 new。Boost.Pool 会首先从操作系统请求托管内存 - 例如,使用 new .从外部来看,您的程序已经分配了内存,但在内部,内存还不是必需的,而是交给 Boost.Pool 来管理它。
2025-02-14 15:31:45
1099
原创 Qt中QApplication 类和uic、moc程序
这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。有时候新增的类,编译器由于某种原因一直生成不了moc_xxx.cpp文件,此时可以手动调用moc程序解决。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。,程序中真正是通过这个类去控制界面文件,而不会直接操作界面文件。的形式记录界面的控件、属性、位置和布局等等,而实际。管理图形用户界面应用程序的控制流和主要设置。文件生成相关类文件ui_xxx.h。应用程序的初始化和结束。
2025-02-14 09:53:17
575
原创 Qt事件机制
事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt。
2025-02-13 22:39:13
1229
原创 轻量级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
442
原创 Qt元对象系统
元对象系统引用反射的基本思想。所谓反射,就是指对象成员的自我检查。使用反射编程(reflection programming),就可以编写出通用的操作,可对有各种不同结构的类进行操作。使用通用的值存储器QVariant,就可以按照一种统一的方式来对基本类型和其它的普通类型进行操作。 简而言之,所谓的反射模式,就是通过自己来查看所有的属性,通过自己的元对象属性来访问自己的全部属性,为什么不直接使用成员函数呢?使用成员函数过于繁琐,通过元对象对应的方法可以快速访问对象的属性 。
2025-02-09 22:59:46
1107
原创 C++四种类型转换
当进行上行转换,也就是把子类的指针或引用转换成父类表示,这种转换是安全的;当进行下行转换,也就是把父类的指针或引用转换成子类表示,这种转换是不安全的,也需要程序员来保证;允许将任何指针类型转换为其它的指针类型;特别是开辟了系统全局的内存空间,需要在多个应用程序之间使用时,需要彼此共享,传递这个内存空间的指针时,就可以将指针转换成整数值,得到以后,再将整数值转换成指针,进行对应的操作。2.用于基本数据类型之间的转换,如把int转换成char,把int转换成enum等等,这种转换的安全性需要程序员来保证;
2025-02-09 11:54:52
364
原创 Boost中几种有趣容器的应用
需要注意的是circular_buffer的迭代器不是循环的,指向或超过end()的迭代器也会引发断言异常,前面所说的到达末尾时自动循环使用容器的另一端空间指的是当达到容器的容量上限,继续push_back方法压入元素时,原来begin处的元素就会被覆盖,原来begin + 1处的元素成为新的begin。C++的STL的map和mutil_map可以把key映射到value,但是这种映射关系是单向的,然而实际项目中有一些场景,双射容器更合适。它实现了一个通用、与标准库的容器一致的接口,并且具有与。
2025-02-09 11:35:44
862
原创 c++可变参数和折叠表达式详解
在C++编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了<stdarg.h>头文件,其中定义了一组宏和类型,用于处理不定参数函数。C++继承了C语言的可变参数机制,使用了stdarg.h提供的宏来处理不确定数量的参数。其原理基于栈的推入和弹出过程,不需要明确参数数量。此外,C++提供了可变参数机制,让我们能够创建接收任意数量参数的函数。这一特性在许多实际应用中非常有用,比如日志记录、函数重载等。<stdarg.h>
2025-02-02 23:54:46
1655
原创 C++中提高代码易用性的语法
基于范围的for循环中,不需要再传递容器的两端,循环会自动以容器为范围展开,并且循环中也屏蔽掉了迭代器的遍历细节,直接抽取容器中的元素进行运算,使用这种方式进行循环遍历会让编码和维护变得更加简便。} // 没有参数, 参数列表省略不写。在遍历关联型容器时也会出现同样的问题,基于范围的for循环中,虽然可以得到一个std::pair引用,但是我们是不能修改里边的first值的,也就是key值。很多时候,lambda 表达式的返回值是非常明显的,因此在 C++11 中允许省略 lambda 表达式的返回值。
2025-02-01 17:44:32
1105
原创 项目中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
186
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅