- 博客(207)
- 资源 (17)
- 问答 (2)
- 收藏
- 关注
原创 Qt6 Host + Updater 更新方案(2):manifest.json 设计与版本比较规则
本文介绍了客户端在线更新系统中manifest.json文件的设计方案。该文件作为更新系统的"单一事实来源",包含版本号、下载地址、哈希校验等关键字段,用于判断是否需要更新并确保下载完整性。文章重点说明了四段版本号的比较规则(如2.1.17.10),强调必须采用逐段数值比较而非字符串比较,避免误判。同时提供了字段设计示例和版本比较代码实现,建议在工程实践中从一开始就加入hash校验等安全措施,为后续扩展灰度发布等功能预留空间。
2026-04-09 10:04:14
39
原创 Qt6 Host + Updater 更新方案(1):整体流程与交互设计
本文介绍了Qt软件在线升级的常见问题及解决方案,提出了分阶段更新的设计思路。通过主程序(Host)和独立更新器(AppUpdater.exe)的职责分离,实现安全的版本更新流程。关键点包括:1)启动时静默检查版本但不执行更新;2)用户确认后由更新器完成下载、校验和替换;3)注重用户体验和更新可靠性,支持取消下载、完整性校验等机制。文章还预告了后续将讨论的manifest.json设计规范,为开发者提供了一套完整的在线升级实现方案。
2026-04-08 08:14:38
35
原创 Qt|HTTP实战到工程落地(11):中断处理
文章摘要:本文详细讲解了如何在Qt网络请求中实现中断功能。通过维护requestId与QNetworkReply的映射表,可以精准定位并中断特定请求。核心实现包括:1)使用take()安全移除映射关系;2)设置interrupted标记区分取消类型;3)调用abort()终止传输但仍会触发finished信号;4)统一在finished回调中处理取消逻辑。这种设计保证了资源回收和结果通知的统一处理,适用于GET/POST/上传/下载等各种HTTP请求场景。
2026-04-07 08:27:59
66
原创 Qt|HTTP实战到工程落地(10):Download回调处理
《Qt HTTP下载实战:进度管理、大文件处理与资源回收》摘要:本文深入探讨Qt网络下载中的工程实践问题,提出基于requestId的多任务追踪方案解决进度显示串台问题。重点解析三大核心回调:1) downloadProgress通过sender()转发进度并携带requestId;2) readyRead采用流式写入避免大文件内存溢出;3) finished统一处理资源回收,包括文件关闭、错误分类和信号分发。特别强调下载完成时必须flush/close文件句柄,Windows平台需注意文件占用问题。文章提
2026-04-02 08:41:39
110
原创 Qt|HTTP实战到工程落地(9):Download附件下载
本文介绍了使用Qt的QNetworkAccessManager实现文件下载功能的核心设计。通过requestId管理异步下载任务,将文件指针、请求类型等上下文信息挂载到QNetworkReply上,并维护requestId到reply的映射表。重点讲解了下载前的目录检查、异步GET请求发起、reply托管文件指针等关键设计,确保大文件下载时能实时显示进度并稳定写入磁盘,避免内存问题。文章为后续实现进度更新、数据写入和完成回调等核心功能奠定了基础。
2026-04-01 10:08:28
29
原创 Qt|HTTP实战到工程落地(8):文件上传Demo
本文介绍了如何使用Qt实现文件上传进度显示功能。通过QHttpRequest模块处理HTTP上传请求,关键点包括:1)初始化UI进度条并设置信号槽连接;2)保存requestId防止进度串扰;3)在uploadProgress回调中计算并更新进度百分比;4)处理上传完成回调,区分成功/失败状态。文章提供了完整的代码示例,展示了如何从读取文件、发起上传到实时更新进度条的全流程实现,特别强调了防御性编程和工程化细节处理,确保进度显示准确可靠。
2026-03-31 10:21:37
32
原创 Qt|HTTP实战到工程落地(7):UploadData 回调处理
本文详细讲解了Qt网络开发中文件上传功能的实现要点,重点解析了上传进度处理和请求完成回调两个核心环节。通过QNetworkReply的uploadProgress信号实时获取上传进度,利用requestId区分并发请求,并将进度信息转发给业务层;同时采用统一的finished信号处理入口完成响应解析和资源回收。文章强调了工程化实现中进度追踪、结果分发和并发管理的设计思路,为构建可维护的上传功能提供了实践指导。
2026-03-30 10:29:23
39
原创 Qt|HTTP实战到工程落地(6):UploadData 文件上传实现
本文详细介绍了使用Qt的QNetworkAccessManager实现multipart/form-data文件上传功能。主要内容包括:1)构建多段表单容器QHttpMultiPart,支持一次上传多个文件;2)设置每个文件的Content-Disposition头部信息;3)发起异步POST请求并管理QNetworkReply资源;4)建立requestId映射以便跟踪和取消请求;5)连接上传进度和结束回调信号。文章强调工程化实现要点,如原子递增请求ID、资源自动释放、进度处理等,适用于中小文件上传场景。
2026-03-27 11:37:08
82
原创 Qt|HTTP实战到工程落地(5):一个Demo跑通POST
本文介绍了如何在自定义QWidget中使用QHttpRequest进行HTTP请求。主要内容包括:1) 定义并初始化QHttpRequest对象,设置请求头和URL;2) 实现登录功能接口,包括密码MD5加密和POST请求;3) 处理HTTP返回数据,包括错误判断和JSON解析;4) 资源释放。文章建议将HTTP请求类设计为单例模式,特别适合小型项目中统一管理网络请求。作者"糯诺诺米团"分享了这些C++开发中的实用技巧。
2026-03-27 10:46:28
72
原创 Qt|HTTP实战到工程落地(4):统一回调出口(QNetworkReply::finished)与错误码设计
本文详细讲解了HTTP请求结束后如何处理返回数据。通过QNetworkReply的finished信号触发HandleReplyFinished槽函数,实现了:1)使用sender()获取请求对象并校验类型;2)通过setProperty防重复处理;3)读取请求上下文信息;4)双重错误检测(Qt网络错误和HTTP状态码);5)分优先级处理取消、系统错误和业务错误;6)统一结果格式上报。文章重点强调了工程实践中的边界处理技巧,如防重入保护、上下文绑定、错误分层判断等,为网络请求处理提供了完整的解决方案。
2026-03-27 10:46:10
80
原创 Qt|HTTP实战到工程落地(3):GettingData 实现 GET/POST 获取 JSON
本文详细讲解了GettingData模块的主要逻辑实现。首先介绍了通过Msg_SendHttpRequestDataResult信号传递请求结果,然后分步骤解析了数据请求流程:1)设置请求超时;2)生成唯一请求ID;3)设置请求头;4)构建完整URL;5)根据请求模式(POST/GET)发送请求;6)绑定上下文属性用于后续处理;7)保存请求映射关系;8)连接finished信号到统一处理函数。重点强调了请求ID的唯一性、上下文属性的重要性以及POST请求中二进制和字符串参数的区别处理。整个流程为后续的请求结
2026-03-27 10:45:44
102
原创 Qt|HTTP实战到工程落地(2):接口契约与公共API
本文详细介绍了QHttpRequest类的整体使用流程,重点讲解了其对外开放的接口、结构体和枚举类型。文章首先说明了数据封装到结构体的优势,然后依次介绍了Enum_HttpRequest(网络访问方式枚举)、HttpRequestHeaderSt(请求头结构)和Enum_HttpRequestType(操作编号枚举)等核心组件。随后详细解析了两个关键结构体:AccessingQHttpProcessingDataSt(HTTP请求参数结构)和GetQHttpProcessingDataSt(HTTP响应结果
2026-03-27 10:44:57
76
原创 Qt|HTTP 实战到工程落地(1):整体架构与封装思路
本文分享了Qt开发中Http通信的封装经验,针对QNetworkAccessManager原生接口存在回调分散、请求管理困难等问题,作者封装了QHttpRequest类。该封装提供了统一请求入口,支持请求ID跟踪、中断功能,整合了GET/POST/下载/上传等操作,并统一处理超时、Header等工程细节。文章重点介绍了封装设计思路:通过分配唯一requestId追踪请求,并在统一回调中处理所有请求类型。开发环境为QtCreator6.8.2,旨在提高开发效率并降低业务逻辑与网络通信的耦合度。
2026-03-27 09:45:21
179
1
原创 C++多线程打包成so给JAVA后端(Ubuntu)<3>
本文介绍了在C++中实现多线程处理硬件数据的方案。针对硬件操作可能触发多个点的情况,作者采用线程池方式处理短生命周期任务。文章重点讲解了单个线程任务的实现逻辑:通过ThreadTask类设置超时时间(默认500ms)和回调函数,使用原子变量控制线程停止,并在超时后触发回调。该方案适用于处理硬件抖动操作,但作为一拖多场景的Demo使用时可能存在局限性。作者表示后续将介绍线程池调用Task的具体实现。
2026-03-25 16:29:33
209
原创 C++多线程打包成so给JAVA后端(Ubuntu)<2>
本文详细介绍了Java与C++通过JNI进行交互的实现方法。主要内容包括:1)JNI双向调用机制,包括Java调用native方法和C++回调Java的过程;2)JVM查找JNI函数的两种方式,重点讲解静态注册的命名规则;3)JNI_OnLoad函数的核心作用,包括缓存全局变量、初始化JavaVM指针等优化措施;4)通过心跳包线程的启动示例,展示如何在C++中创建线程并与Java交互。文章提供了完整的JNI生命周期管理代码,并解释了关键全局变量的作用,为开发者实现高效的JNI交互提供了实用指导。
2026-01-04 16:51:46
736
原创 C++多线程打包成so给JAVA后端(Ubuntu)<1>
本文介绍了如何使用C++编写动态链接库(so)供Java后端调用,重点讲解了心跳包线程的实现。作者通过JNI技术将C++代码编译成so文件,在Ubuntu系统中运行。核心功能包括:1)固定心跳包线程,每秒轮询设备状态;2)多线程处理硬件设备的防抖操作。文章详细说明了线程启动、JNI环境处理、设备ID存储优化等关键技术点,并指出了代码中的不足之处。这种方案在性能、复用性和功能扩展性方面具有优势,适合需要处理多设备连接的服务器端应用。
2025-12-29 15:34:52
1012
原创 Qt|麦克风设备热插拔功能(升级版Windows)
本文介绍了麦克风热插拔功能的优化方案。作者发现原有代码仅检测设备名称而未判断麦克风切换状态,导致多个麦克风同时存在时无法正确识别默认设备。解决方案采用Windows API替代Qt实现,通过AudioDeviceMonitor类监听设备变更,利用IMMNotificationClient接口实时获取默认麦克风变化。关键改进包括:1)使用Windows原生API避免额外线程开销;2)通过设备ID精准识别当前默认麦克风;3)当检测到默认设备变更时发出信号通知上层应用。该方案在VS2019+Qt5.15.2环境下
2025-09-17 11:46:07
438
原创 C++|UDP通讯使用总结
本文分享了使用C++原生UDP替代Qt的QUdpSocket进行高性能网络通信的经验。作者最初采用QUdpSocket开发,但发现其封装层导致性能不足,无法满足50台设备的高吞吐量需求。转而使用原生C++ UDP实现,通过创建非阻塞套接字、设置广播参数、绑定端口等技术手段,配合双线程架构(监听线程+工作线程)和队列处理机制,显著提升了通信效率。文中详细介绍了从套接字创建到线程处理的完整实现流程,包括IP过滤、数据校验等关键细节,为需要高性能UDP通信的开发提供了实用参考方案。
2025-08-25 16:21:06
783
原创 Qt6.8.2中WebAssembly沙盒环境中预加载文件
WebAssembly作为Web技术的一部分,应该也遵循同源策略,直接访问绝对路径可能会破坏同源策略,导致不同来源的代码能够随意访问彼此的文件资源,引发安全漏洞。使用这种方式就可以将本地文件夹映射到虚拟文件系统,在程序中直接访问虚拟文件夹中的内容就行了。在WebAssembly的沙盒环境中是不允许直接按照绝对路径访问文件的。是 qmake 变量,代表当前项目路径)下的。我是糯诺诺米团,一名C++开发程序媛~使用这种方式就可以访问本地文件了。假设本地文件的路径结构如下所示。
2025-04-28 09:04:40
540
原创 Qt6.8.2中WebAssembly沙盒环境打开本地文件并显示<1>
前几篇文章中已经讲述了javaScript与Qt程序回调,今天为大家分享在QtCreator的WebAssembly环境中打开本地文件并展示到控件上。
2025-04-24 09:26:20
491
原创 Qt6.8.2中JavaScript调用WebAssembly的js文件<3>
开发环境:win11 + Qt6.8.2 + WebAssembly3.1.56在进行字符串操作时,我尝试了以下几种方式。
2025-03-20 14:30:19
1111
1
原创 Qt6.8.2中JavaScript调用WebAssembly的js文件<1>
前段时间已经学习了如何在QtAssembly中编译FFmpeg资源了,接下来需要使用Html来调用QtCreator中WebAssembly套件写的功能,逐步实现javascrpt与c++复杂功能的视线。接下来我先为大家介绍一个非常简单的加法调用吧!
2025-03-13 16:51:04
621
原创 Qt6.8.2创建WebAssmebly项目使用FFmpeg资源
之前使用FFmpeg解码器时没有编译过,想要在WebAssmebly套件环境中使用FFmpeg时,不能使用dll的方式,所以只能手动编译,这个步骤对我来说还是有一定难度的,不是不会编译,而是编译出来的内容,无法在QtCreator中应用。接下来我来详细讲述下如何编译FFmpeg并使用。虽然编译过程很简答, 主要是环境配置以及在项目中的兼容程序,之前总是查询emconfigure的使用,浪费了很长时间,发现不用调用“emconfigure”也可以编译成功。
2025-03-06 17:23:46
1289
原创 Qt|麦克风设备热插拔检测功能
最近在开发的项目中用到了麦克风进行语音识别功能,此时就需要知道麦克风是否被连接。今天我为大家分享一下,如何实时检测麦克风是否连接。在Qt的想要类中,没有实时检测的方法,那么对于实时检测麦克风,那一定是用开线程的方式,在下面的Demo中,我设定的是1s检测一次。
2025-01-03 10:24:36
538
原创 Qt|QWidget窗口支持旋转
功能实现:使用QWidget创建的窗口支持窗口旋转功能。展示的示例中支持由水平方向旋转至垂直方向。至于其它角度旋转的问题,看完这篇文章后应该会很简单能实现的!开发环境:win VS2019 + Qt 5.15.2在实现之前也有想用使用 QPropertyAnimation类,用动画的方式实现,经过验证发现,动画类不支持在object中进行旋转操作,所以放弃!所以,采用广大博友推荐的方式:QGraphicsView控制场景中的子窗口进行旋转。
2025-01-02 16:25:01
1835
原创 Qt中模拟鼠标消息并与系统鼠标消息进行区分
开发一个教学系统,包含了教师端、学生端,并且教师端支持示教功能。此时,学生端的鼠标、键盘不响应系统事件,但需要响应教师端发过来的鼠标移动、按下消息。因为共享页面相同,为了提高局域网实时效率,采用UDP通讯方式,使用最快(目前我没有找到比这个更快的了,如果有,小伙伴可以评论区告诉我哟,我也学习下)在实现功能时,主要实现方式:使用钩子函数,处理系统发送的鼠标以及键盘消息。那么禁用掉教师端的鼠标键盘消息后,如何在教师端响应按下消息时,也让学生端响应呢?
2024-11-28 10:30:44
759
原创 C++|海康摄像头实时预览时设置音量大小
在这里,大家需要注意箭头指向的参数,取值范围在[0, 0xFFFF],不是我们常用的0-100的十进制数了。因为在设置的时候我并没有过多关注这一点,导致打开声音后无论怎么设置都没有音量,还研究了很长时间。,接收到系统头数据后就可以调用了,并且该类型只会在打开时调用一次,不会出现频繁调用的现象!能够成功实现后会发现,代码很简单,难得是不知道什么时候调用,以及对参数的正确引用。对于以上两种问题,我相信很多人都遇到了,前段时间尝试了各种方式,终于解决了!下面我来讲述下我的解决方法把,希望对有需要的人有用!
2024-07-05 15:32:57
1019
原创 Qt|海康摄像头多个页面展示问题
程序应用过程中只需要登录一次,退出一次即可。中间无论有多少个页面需要展示,只需要修改“在程序中多个不同功能页面需要展示摄像头的实时预览画面,该如何高效的展示呢?按照流程图可知,想要预览一个摄像头画面,需要先登录->启动预览->退出这样完整的流程。在使用软件之前,摄像头的编号已经生成在“camera.csv”文件中。如果程序中存在多个窗口展示摄像头画面时,需要每次都经过这些完整的流程吗?为大家分享一个使用海康摄像头的小功能,希望对大家有用~该功能已测试,非常方便!
2024-06-19 14:13:44
632
原创 Qt|QWebSocket与Web进行通讯,实时接收语音流
实现功能主要思路:在网页端进行语音输入,PC机可以实时接收并播放语音流。此时,Qt程序做客户端,Web端做服务器,使用QWebSocket进行通讯,实时播放接收的语音流。
2024-06-19 08:14:47
1932
原创 Window下VS2019编译WebRTC通关版
这段时间需要实现这样一个功能,使用WebRTC实现语音通话功能,第一步要做的事情就是编译WebRTC源码,也是很多码友会遇到的问题。经过我很多天的踩坑终于踩出来一条通往胜利的大路,下面就为大家详细介绍,编译步骤以及踩坑问题吧!在这里我首先说明:WebRTC的源码我就不提供了,因为我也是沾了别的博友的光,这里我才用的是2021年WebRTC版本下载源码踩坑记录:不需要下载git插件、gn插件,只需要下载对WebRTC源码以及depot_tools就行。
2024-05-29 11:30:36
1242
3
原创 Qt|实现5分钟无操作自动关闭程序功能<2>
继承自QRunnable添加头文件Q_OBJECTpublic:private:void run();一般情况下,线程的处理是在run函数中处理。
2024-05-14 15:45:57
1290
2
原创 Qt|实现5分钟无操作自动关闭程序功能<1>
前两天接到了这样一个需求:当用户长时间不进行页面上功能操作时,默认该用户已经离开了,此时需要弹出页面提醒用户,并在倒计时10s后强制关闭程序。不知道大家在开发过程中有没有遇到过这种请求呢?针对这种功能该如何开发呢?今天这篇文章主要为大家讲解实现思路,具体实现可以看下一篇文章哟~肯定是要从最后一次操作程序开始计时,在时间到达指定时间(五分钟)之内,并没有接收到新的操作时,说明程序已经五分钟没有用户操作了,此时需要提醒用户是否需要强制关闭程序。想要实现该功能,需要解决以下问题。
2024-05-13 09:22:00
808
原创 QtCreator修改Build目录
这种展示方式无论是Debug还是Release文件下都有对应的debug、Release子文件夹,只是根据构建的方式不同,exe存储的位置也不同。4:创建一个新Qt项目,此时生成的debug和Release就会在同一个bin目录下了。根据VS的使用习惯,一般会生成一个叫做"bin"的文件夹,此时为了方便也修改为该文件夹。默认情况下,创建一个新项目时,会生成一个名字很长的文件夹存放exe。最近在使用过程中,遇到了这样一个问题,想修改Build工程的目录。接下来,说一下如何修改项目的构建目录。
2024-03-01 09:36:00
1247
1
原创 Qt|实现时间选择小功能
在软件开发过程中,QtDesigner系统给出的控件很多时候都无法满足炫酷的效果,前一段时间需要用Qt实现选择时间的小功能,今天为大家分享一下!首先看一下时间效果吧!如果有需要继续往下看下去哟~
2024-02-04 13:07:38
2807
2
原创 Qt|开发程序如何自适应屏幕的简单方法
在早几年前,PC的显示屏幕几乎是1920*1080、1680*1050这两种规格,对于PC的window界面开发人员来说,页面也都是按照屏幕大小进行设计的。但是这种根据屏幕大小进行界面设计的方式已经受到了很大限制!近年来,显示屏的尺寸越来越多样化,PC开发的程序肯定不能再和之前一样了,那么该如何让PC开发的程序进行自适应屏幕呢?
2024-02-01 13:17:18
3582
原创 Qt|QTextEdit编辑文本自动拉伸高度以及踩坑经验
最近做开放项目时,遇到了这样一个需求:使用QTextEdit编辑文本,随着编辑文本的变化,窗口高度自适应拉伸。实现该功能的核心思想:响应QTextEdit::textChanged消息,实时获取QTextEdit高度,当编辑框内容的高度超过最小值时,需要修改QTextEdit的高度。对于TextEdit编辑框自动拉伸的功能,很多博友也有记录,今天主要是针对踩坑经验分析,为大家分享!首先看一下实现效果~接下来,详细讲述如何实现该功能吧!
2024-01-31 08:13:51
3339
2
原创 Qt|制作简单的不规则窗体
通常我们用到的对话框基本上都是规则的,在有些特殊情况下,也会使用到不规则窗口,那么该如何实现不规则窗体呢?在MFC框架下很难实现,应该说是难的都想放弃,但是,Qt框架下提供了一个叫做setMask()函数,用来实现不规则窗体,为窗体设置遮罩。在今天的功能介绍中,主要是围绕如何setMask()函数进行讲解的。首先,我们看一下实现出来的效果吧!功能:点击鼠标左键拖动窗口进行移动,鼠标右键销毁当前窗口。用到的事件:鼠标按下事件、鼠标拖动事件、绘图事件。
2024-01-30 11:38:43
1376
2
原创 Qt|QPushButton控件讲解
目前想到的功能也就这些啦~如果还有想要实现却没法实现的功能,评论下说明我会更新的哦~我是糯诺诺米团,一名C++开发程序媛~
2024-01-29 08:56:50
1828
1
原创 Qt中ListWidget控件总结
假设,有一个QCustomWidget自定义widget需要放入QListWidget控件中,该如何使用呢?//创建自定义widget/*当前自定义控件的功能设置,这里不一一展示,每个人的要求不一样*///必须要写show哟~//将自定义widget插入到列表中假设需要点击每个自定义的widget时,响应消息做不同的处理,那么该如何操作呢?答:我们每往QlistWidget中插入一条自定义信息时,必须要对插入的指针做消息处理。
2024-01-18 09:15:50
855
Qt - HTTP 工程化封装核心代码(QHttpRequest)
2026-03-30
Qt中麦克风进行热插拔检测核心代码
2025-01-03
Qt中使用graphicsView旋转QWidget窗口
2025-01-02
Qt中使用QWebSocket与Web进行通讯,实时语音通话
2024-06-18
实现5分钟无操作自动关闭程序功能
2024-05-08
Qt中实现自定义时间选择功能
2024-02-04
Qt中QTextEdit控件随着文本变化控件自动拉伸
2024-01-31
Qt实现打地鼠小游戏(包含晋级操作)
2022-09-29
Quazip加密、解密
2022-06-13
QGraphicsView架构实现基本图形的绘制
2022-05-07
Qt使用QuaZip解密带有密码的压缩文件
2022-02-09
C++程序中,关于GDI绘图的操作
2018-06-05
控件------Static的自绘,继承与CStatic
2018-05-17
wmpSource.zip
2019-09-06
文件名复制,类似windows功能
2022-01-10
QT中使用QWT实现一类柱状图多种颜色
2020-12-24
QtLabelLineSpacing.zip
2022-01-04
控件-----Edit的重绘,继承自CEdit
2018-05-03
如何第三方的使用百度地图?
2015-12-22
想要用Dephi语言这一个虚线 : 水平、垂直移动的动态效果
2015-12-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅