- 博客(924)
- 资源 (20)
- 收藏
- 关注
原创 C++ Qt零基础入门进阶与企业级项目实战教程与学习方法分享
本套课程由浅入深,详细的介绍了C++入门、Qt入门进阶到企业级项目实战、C++ Qt开源项目学习。相信通过本套教程的3门课程的学习,大家可以很好的掌握C++ Qt开发,课程提供答疑服务。
2023-09-21 23:00:33
5676
原创 WebRTC多人通信深度解析:从核心原理到架构选型
WebRTC(Web Real-Time Communication)作为一项革命性的实时通信技术,其核心在于实现浏览器或移动应用之间无需插件的点对点(Peer-to-Peer, P2P)音视频和数据通信。然而,在多人通信场景下,问题变得复杂。一个稳定、高效的WebRTC多人通信系统,其背后是一套精密的协议栈和架构设计。本章节将深入剖析WebRTC多人通信的三大核心支柱:信令交互、ICE协商以及媒体流传输与安全保障。信令交互是通信双方建立连接的“语言”,负责交换必要的元数据;
2025-12-21 23:19:35
195
原创 webrtc如何实现音视频同步
WebRTC 的音视频同步是:用 RTP timestamp 表示媒体时间,用 RTCP SR 把它映射到 NTP 时间,客户端以音频为主时钟动态调整视频播放。好,这一轮我按你要的三点一起讲,而且是真·源码级,不是概念图那种。① WebRTC 源码中 AV Sync 的关键类 & 函数② 用“文字时间轴图”画清楚同步过程③ SFU / MCU 架构下,同步责任的本质差异。
2025-12-21 22:44:18
63
原创 C++ Qt程序限制多开
如果你希望修改提示文字或唯一 key,只需要改 QSharedMemory 里的字符串和 QMessageBox 的文案即可。第二次运行时,这块共享内存已经被第一次运行的程序创建了,再调用 create 会失败,返回 false。表示已经有实例在运行,直接退出,不再执行后面的 MainWindow w;创建一段带有全局唯一 key 的共享内存对象,所有进程都能看到这个 key。第一次运行时,这块共享内存还不存在,创建成功,返回 true,程序正常继续。
2025-11-16 22:23:15
209
原创 C++20协程深度解析与实践指南
C++20 引⼊的协程(Coroutines)是⼀种特殊的函数,它能够在执⾏过程中被挂起(suspend),并在未来的某个时间点从挂起的位置恢复(resume)执⾏ 。这种机制使得编写异步代码变得如同编写同步代码⼀样直观,极⼤地简化了传统异步编程中复杂的回调函数(callback hell)和状态机逻辑 。
2025-11-13 08:22:40
114
原创 python *和**做参数的用法
函数定义中使用 *total = 0for num in args: # args是一个元组# 调用:直接传入多个位置参数print(sum_numbers(1, 2, 3)) # 输出: 6 (args = (1, 2, 3))# 函数调用中使用 * 展开numbers = [4, 5, 6] # 列表print(sum_numbers(*numbers)) # 输出: 15 (相当于 sum_numbers(4, 5, 6))# 函数定义中使用 **
2025-11-02 17:35:03
842
原创 PySide6集成yolo v8实现图片人物检测、视频人物检测以及摄像头人物检测
本篇博客介绍Python YOLO目标检测, 并在PySide6应用里集成YOLO v8实现图片人物检测、视频人物检测以及摄像头人物检测。
2025-11-01 20:18:05
1710
1
原创 QtQuick3D入门(6):3D粒子系统
场景:HDR 天空盒 + 一个高反射球体 + 一个点光源。粒子表现:从上方特定区域发射大量“雪花”(当前使用的贴图可能是占位),粒子向下移动并在生命周期结束时消失,系统预热 15 秒以便初始即显示完整雪景。
2025-10-28 21:23:48
102
原创 QtQuick3D入门(5):实例化渲染
实例化渲染是一种优化技术,它允许你只用一个绘制命令(Draw Call)就渲染出成千上万个外观相同(或相似)的物体。它的核心思想是:提供一个“蓝图”:告诉GPU,“我要画一个立方体(或一棵树的模型)”。提供一个“数据列表”:你再给GPU一个列表,这个列表包含了每一个实例(instance)的独特信息,比如它的位置、旋转、缩放、颜色等。GPU完成工作:GPU接收到这个“蓝图”和“数据列表”后,会自己高效地循环这个列表,将蓝图模型在指定的位置、以指定的姿态和颜色等绘制出来。
2025-10-28 21:11:33
104
原创 QtQuick3D入门(2):材质 material
QtQuick3D的材质大部分也是参照OpenGL的实现,只是在OpenGL里使用起来刚方便。在 OpenGL 的 3D 开发中,材质(Material)用于描述物体与光线的交互方式,是光照计算中非常关键的一部分。材质决定了物体的视觉效果——比如是否看起来是金属、塑料、玻璃或皮肤。在现代 OpenGL (尤其是基于着色器的管线,例如 OpenGL 3.3+)中,材质通常通过 uniform 或 纹理贴图 的方式传递给着色器。
2025-10-27 22:07:12
123
原创 Python偏函数partial的用法
Python偏函数partial用法详解 摘要:Python的functools.partial用于创建部分参数绑定的函数版本,简化函数调用。文章介绍了7个核心用法:1)基本参数绑定规则;2)与map/sorted等标准库函数配合;3)回调函数传额外参数;4)创建参数化装饰器;5)与lambda的对比;6)调试属性;7)类方法中的partialmethod。partial能固定部分参数,返回可调用对象,适用于柯里化、回调传参等场景,比lambda更具可读性和可序列化优势,是Python函数式编程的重要工具。
2025-10-23 22:10:13
579
原创 python asyncio的各种用法与代码示例
本文是一份Python asyncio实战手册,涵盖从基础到进阶的核心概念和代码示例。主要内容包括:async/await语法基础、并发执行(create_task/gather/as_completed)、超时控制与取消(wait_for/timeout)、同步原语(Semaphore/Lock/Event)、生产者-消费者模式(Queue)以及Python 3.11+的TaskGroup特性。所有示例仅依赖标准库,适配Python 3.10+,并特别标注了3.11+专属功能。
2025-10-23 21:59:27
673
原创 C++ std::unordered_map使用结构体为key与自定义哈希函数
在使用std::unordered_map时常见的是用基本数据类型作为key, 例如int、string等等,如果用到自定义类型,例如结构体或者类,那么就要需要额外提供第 3 个参数"哈希函数",有时候还要提供第 4 个参数"相等比较器"。所以 unordered_map 一般有 最多五个模板参数。
2025-09-20 15:58:15
295
原创 C++ std::hash的用法
如果你有一个自定义结构体,要想放到或里,必须提供std::hash。struct是一个模板类,实例化后就是哈希函数对象。常用于等哈希容器。标准库已经为基本类型和常见类型实现了std::hash。对于自定义类型,要么写单独的哈希器结构体,要么特化std::hash。
2025-09-20 15:46:31
137
原创 qml实现多页面切换显示的导航栏
QML中实现标签页功能的三种方式:1) 已废弃的TabView;2) 推荐使用TabBar+StackLayout组合,通过TabButton切换不同页面;3) TabBar+SwipeView组合,支持滑动切换。第三种方式更灵活,可自定义标签栏位置和样式,符合Qt Quick Controls 2的设计理念。所有方案都通过currentIndex实现页面联动,开发者可根据需求选择最合适的实现方式。
2025-09-19 21:14:38
316
原创 解决QtCreator Qt5.15.2编译时Qt\5.15.2\msvc2019\include\QtGui\QGuiApplication‘ does not exist.
在Windows上使用Qt5.15.2 qmake创建项目时,可能会出现如下报错。取消勾选“使用jom代替nmake”,然后重新编译运行项目。菜单: 编辑 — prefenerces — 构建和运行。
2025-09-19 21:04:21
317
原创 ubuntu git push每次都要输入密码怎么解决只输入一次密码
在 Ubuntu 下使用 Git 时,如果每次 push 都需要重复输入密码,可以通过配置 Git 凭证存储来解决。以下是几种常用方法:🔑 方法一:使用 Git 凭证缓存(推荐)
2025-09-13 23:37:22
1214
原创 Dijkstra算法介绍以及C++实现
Dijkstra(迪杰斯特拉)算法是一种**单源最短路径算法**,用于在带非负权重的图中,计算某个起点到其它所有顶点的最短距离。它由荷兰计算机科学家 Edsger W. Dijkstra 在 1956 年提出。
2025-08-12 15:26:16
865
原创 如何防止sqlite会出现数据库文件损坏的问题
SQLite数据库可能因断电、硬件故障或文件系统错误而损坏。预防措施包括使用事务、开启WAL模式、配置同步模式以及定期备份。若发生损坏,可使用PRAGMA integrity_check检测,并通过.dump或.recover命令尝试修复数据。SQLite内置机制能有效降低损坏风险,但备份仍是关键保障。
2025-08-06 10:56:08
396
原创 C++ Qt6 CMake qml文件启动方式说明
在Qt6之后,Qt程序默认使用CMake进行构建,当然也可以使用qmake, 本篇博客介绍Qt6.8之前和Qt6.8版本中QtQuick程序的启动方式。在QtQuick程序main.cpp里qml的文件启动分为两种:(1)直接加载qml文件,(2)加载qml模块,下面分别介绍这两种启动方式。
2025-07-25 21:58:37
331
原创 Linux epoll简介与C++TCP服务器代码示例
epollselectpoll每次调用都把全部文件描述符从用户态拷贝到内核态,随连接数增长而线性变慢;epoll采用事件驱动就绪队列的方式,内核只把“已就绪”的描述符返回给用户态,O(1) 规模扩展;支持边沿触发 Edge-Triggered (ET)与水平触发 Level-Triggered (LT)两种模型,便于构建高性能网络服务。
2025-07-10 14:35:14
269
原创 linux C++代码调试技巧
选择合适的调试方法取决于具体的问题类型和复杂程度。对于简单问题,打印调试可能就足够了;对于复杂的内存问题,可能需要使用Valgrind或AddressSanitizer。
2025-07-08 16:02:39
596
原创 正确解决! [remote rejected] head -> refs/for/master (change xxxx closed) error: failed to push
最近在往Gerrit提交代码时出现了!弹出窗口后,删掉别人不需要的提交,或者把不需要的提交的前面的pick改成d, 然后wq保存,再push就可以了。我尝试了上面的方式,还是报错了,无法push.2.把Change-Id 删除。3.再次提交问题解决。
2025-07-02 16:51:13
419
原创 C++实现状态机
状态机,全称为有限状态机(Finite State Machine, FSM),是一种用来表示有限个状态以及在这些状态之间如何转移和响应的数学计算模型。[1][2]简单来说,它是一个抽象机器,在任何给定时间点,它都只能处于一个确定的状态。[1][3]当某个事件(输入)发生时,它会从当前状态转换到另一个状态,这个过程称为“转换”(Transition)。[1]可以将状态机看作是一种描述系统行为的强大工具,尤其适用于那些行为模式依赖于其内部历史状态的系统。[4]
2025-07-02 14:07:07
262
原创 Numpy使用笔记
NumPy (Numerical Python 的缩写) 是 Python 中一个非常重要的库,它提供了强大的多维数组对象(ndarray)以及用于处理这些数组的各种工具。在进行科学计算、数据分析以及机器学习等任务时,NumPy 几乎是不可或缺的基础工具。TensorFlow 和其他许多机器学习库在底层都大量使用了 NumPy 的数组操作。
2025-06-23 09:00:49
570
原创 linux VFS简介
Linux VFS 是内核文件子系统的基石。它通过定义一组精妙的数据结构(inodedentryfile)和操作接口,在应用程序的通用文件操作请求和底层千差万别的具体文件系统实现之间架起了一座高效的桥梁。它使得 Linux 能够同时支持海量不同类型的文件系统,并为用户和应用开发者提供了极其简洁、一致的文件访问体验。理解 VFS 是深入理解 Linux 文件管理和存储机制的关键。
2025-06-22 23:37:27
696
原创 qml显示svg矢量图形
SVG 是一种基于 XML (可扩展标记语言) 的、用于描述二维矢量图形的开放标准。简单来说,它不是像 JPEG、PNG 那样用像素点阵来记录图像(位图/栅格图),而是用一套数学公式和指令来描述图形的形状、线条、曲线、颜色和文本。你可以把它想象成一份“绘图说明书”,告诉浏览器或渲染引擎如何一步步地画出这个图形。例如,一个红色的圆形,PNG 文件会记录每个像素点的颜色值,而 SVG 文件则会记录类似这样的信息:“在坐标 (50, 50) 处,画一个半径为 40 的圆,并用红色填充它”。
2025-06-14 09:06:01
411
原创 C++ Protocol Buffers使用介绍
proto文件是 Protobuf 的核心,它定义了数据结构(称为 “message”)以及服务接口(可选,用于 gRPC)。消息 (Message):类似于 C++ 中的类或结构体,用于组织数据。每个消息包含一系列带类型的字段。字段 (Field):消息中的数据单元,每个字段都有一个名称、一个类型和一个唯一的编号(tag)。类型:可以是基本数据类型(如int32stringboolbytes),也可以是其他消息类型(嵌套消息),还可以是枚举类型 (enum编号 (Tag)
2025-06-03 08:48:22
214
原创 C++ TCP程序增加TLS加密认证
TCP程序添加TLS主要是为了解决TCP协议本身的安全缺陷。:TCP传输的数据完全暴露在网络中,任何能够监听网络流量的人都可以直接读取传输内容。这对于敏感信息(如密码、个人资料、商业机密)来说是极其危险的。:恶意攻击者可以在传输过程中修改数据包内容,而接收方无法检测到这种篡改。这可能导致数据完整性被破坏,影响应用程序的正常运行。:TCP连接无法验证通信双方的真实身份,攻击者可以轻易伪装成合法的服务器或客户端,进行中间人攻击。:攻击者可以捕获并重新发送之前的数据包,可能导致重复操作或其他安全问题。
2025-05-30 18:30:39
554
原创 贪心算法原理以及C++实现
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。它不考虑历史的选择,也不试图回溯或修正之前的选择。“目光短浅”:只考虑局部最优解,希望这些局部最优解能最终组合成一个全局最优解。特点:无后效性(No Aftermath):当前的选择不会对后续子问题的求解产生影响。局部最优选择(Locally Optimal Choice):每一步都选择当前看来最好的方案。不可撤销(Irreversible):一旦做出选择,就不能改变。
2025-05-29 10:20:11
231
原创 C++快速排序原理解析
快速排序是一种分治法(Divide and Conquer)思想的排序算法,其主要思想是:(1)选取一个基准元素(pivot),通常可以选择数组的第一个、最后一个、中间一个或随机一个元素。(2)分区(partition):将数组分成两部分,左边部分的元素都小于基准元素,右边部分的元素都大于基准元素。(3)递归排序:对左右两个子数组分别递归地进行快速排序。
2025-05-29 10:04:57
82
C++ QMainWindow无边框窗口自定义标题栏可拖拽移动拉伸改变窗口大小
2024-04-23
Qt蓝牙串口源码支持十六进制发送、字符发送、定时发送
2022-02-22
支持向量机通俗导论(理解SVM的三层境界)PDF
2018-04-13
jsoncpp_sdk_x64.rar
2020-04-06
C# TCP网络通信示例:多人聊天发文件
2018-04-02
很全的 Qt qss
2020-09-29
c++ PImpl实现机制
2021-09-15
C++/OpenCV2.4.9 数字精确识别源码
2017-11-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅