- 博客(204)
- 收藏
- 关注
原创 qml 信号触发后槽函数多次执行
每次调用该函数,都会建立新的信号 - 槽连接,当信号触发时,每个连接都会触发一次槽函数的执行。确保在信号与槽连接时使用的是正确的对象实例,并且在代码中对对象实例的管理要清晰。仔细检查整个项目代码,搜索信号和槽函数的名称,确保没有其他地方建立了相同的连接。可能存在其他地方也建立了相同的信号 - 槽连接,这可能是由于代码结构复杂或者团队协作时引入的。被调用了两次,这样信号与槽的连接就会重复建立,当信号触发时,槽函数会执行两次。对象实例,可能会导致信号发射和槽函数调用的混淆,从而出现槽函数执行多次的情况。
2025-03-07 10:15:22
303
原创 高级系统架构师--第十一章:数据库系统
比如,对于一个包含员工基本信息、薪资信息和绩效信息的员工表,可以将基本信息(如姓名、年龄、部门等)放在一个分片,薪资信息(如工资、奖金等)放在另一个分片,绩效信息(如绩效评分、考核结果等)放在第三个分片。例如,一个存储客户信息的表,可以按照客户的地域(如将北方地区的客户放在一个分片,南方地区的客户放在另一个分片) 或者按照客户注册时间(如将不同年份注册的客户划分到不同分片)进行水平分片。例如,先按照客户地域进行水平分片,然后对每个地域的客户分片再按照客户属性(如普通客户、VIP 客户)进行垂直分片。
2025-03-03 09:02:04
652
原创 高级系统架构师--第十章:计算机网络
交换机的相关知识:交换机是基于MAC地址识别来封装转发数据包的网络设备;其初始MAC地址为空;收到数据帧,若没对应表项就广播转发 (数据泛洪);能读取源地址添加MAC地址表项,表项动态增长;重启时地址表会清空。集线功能:通过提供多个端口连接线缆,构建星状拓扑网络。中继功能:转发帧时重新生成不失真电信号。桥接功能:在内置端口使用相同转发和过渡逻辑。隔离冲突功能:将局域网划分为多个冲突域,各有独立带宽,提升整体带宽利用效率。
2025-02-25 09:06:55
1330
原创 高级系统架构师--第九章:嵌入式系统
内核层:含内核子系统和驱动子系统。内核子系统采用多内核设计,可支持不同资源受限设备;驱动框架是硬件生态开放基础,提供统一外设访问及驱动开发、管理能力。系统服务层:系统服务层是鸿蒙系统核心能力集合,由系统基本能力、基础软件服务、增强软件服务、硬件服务四部分子系统集构成。框架层:为应用程序提供框架,有Java/C++/JS等多语言用户程序框架和Ability框架,也为搭载设备提供C/C++/JS等多语言框架API。应用层:包含系统应用和第三方非系统应用,鸿蒙系统应用由一个或多个FA/PA组成。
2025-02-23 17:23:49
641
原创 高级系统架构师--第八章:计算机系统基础
对比先来先服务 寻道长度小了一倍左边和右边的区别?指令集是计算机硬件与软件之间的接口规范,是CPU所能执行的全部指令的集合。功能:指令集规定了CPU可以执行的操作,如算术运算(加、减、乘、除等)、逻辑运算(与、或、非等)、数据传输(从内存读取数据到寄存器等)、控制转移(跳转指令等)。程序通过这些指令的组合来实现各种复杂功能。分类:常见的有复杂指令集(CISC )和精简指令集(RISC )。
2025-02-20 19:13:30
972
原创 高级系统架构师--第六章: 信息安全技术基础知识
SM1:对称加密,分组长度和密钥长度均为128比特,广泛应用于电子政务、电子商务及国民经济各个应用领域。SM2:非对称加密,用于公钥加密算法、密钥交换协议、数字签名算法,是国家标准推荐使用,素数域256位椭圆曲线。SM3:杂凑算法,杂凑值长度为256长度,适用于商用密码应用中的数字签名和验证。SM4:对称加密,分组长度和密钥长度都为128比特,适用于无线局域网产品。SM9:标识密码算法,不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。
2025-02-18 10:13:37
1130
原创 高级系统架构师--第五章:系统可靠性分析与设计
它综合考虑了系统的可靠性和可维护性,MTBF值越大,表明系统在两次故障之间能够正常运行的时间越长。MTTR越短,说明系统在出现故障后能够更快地恢复正常运行,例如一个服务器在出现故障后,技术人员能在较短时间内修复,其MTTR就相对较小。指系统无故障运行的平均时间,是衡量系统可靠性的指标,用于描述系统在正常运行状态下能够持续工作的平均时长。故障发生到被检测出来的时间,也可理解为故障的潜伏期。及时检测到故障对于系统的维护和修复非常重要,较短的MTTD可以使系统在故障发生后尽快得到处理,减少故障带来的影响。
2025-02-17 15:30:46
878
原创 高级系统架构师--第四章:软件架构设计
架构会定义一套特定的术语集合。在软件架构的语境下,这些术语有着明确的含义。例如在微服务架构中,“服务”“网关”“负载均衡”等都是其词汇表中的术语,开发团队成员基于这套统一的词汇表进行沟通和协作,能够减少误解,提高开发效率。架构还包含了一系列的规则和限制。这些约束可能涉及到软件的性能、可扩展性、安全性等方面。比如在实时性要求高的应用架构中,会对数据传输延迟、响应时间等有严格的约束,以确保系统能满足特定的业务需求。这些约束指导着软件系统的设计、开发和维护等各个环节。
2025-02-15 20:51:20
877
原创 高级系统架构师--第三章:项目管理
分解:采用分解技术来定义活动,就是要把项目工作包分解成更小的、更易于管理的组成部分,即活动——为完成工作包而必须开展的工作。定义活动过程最终输出的是活动,而非可交付成果。可交付成果是创建工作分解结构过程的输出。WBS、WBS词典与活动清单,既可依次编制,也可同时编制。WBS和WBS词典是制定最终活动清单的依据。WBS中的每个工作包都需分解成活动,以便通过这些活动来完成相应的可交付成果。让团队成员参与分解,有助于得到更好、更准确的结果。
2025-02-12 18:01:45
876
原创 高级系统架构师--第二章:软件工程
在需求工程中,SRS 是 Software Requirements Specification 的缩写,即软件需求规格说明书。它是需求工程中的关键文档构件组装模型通过重用提升软件可靠性与易维护性,修改程序时副作用少、易维护。其开发过程为设计构件组装、建立构件库、构建应用软件、测试与发布。优点有构件自包容利于系统扩展;设计良好的构件易重用,降低开发成本;构件粒度小,开发任务安排灵活,可分组并行独立开发构件。
2025-02-10 17:04:30
1274
原创 高级系统架构师--第一章:系统工程与信息系统基础总结
结构化开发方法是用系统工程思想和工程化方法,按用户至上原则,自顶向下对系统进行分析和设计,再自底向上逐步实施的一种开发过程。它强调开发过程的整体性和全局性,遵循严格的步骤和规范,将系统开发过程划分为若干阶段,每个阶段都有明确的任务和目标。
2025-02-08 14:16:18
1046
原创 SYN Flooding的攻击原理
SYN Flooding是一种常见的网络攻击方式,属于拒绝服务攻击(DoS)的一种,其攻击原理主要是利用了TCP协议的三次握手过程,以下是具体介绍:
2025-01-25 14:55:12
443
原创 qt--Qml控件库如何从外部导入2.0
之前那个版本可能会出现一些问题 就是打包的时候 相关的qml的路径是写死的了 再跑到其他电脑上面去运行的时候 qml相关的模块会自动到之前打包电脑的路径下寻找。无法到达在其他电脑上运行的目的。
2025-01-24 10:34:20
460
原创 com组件技术学习 第二章
本章内容主要是COM对象的一些基本知识本章把com对象称为对象 把com接口称为接口客户端 通过指向接口数据结构的指针来调用接口成员函数里面是包含是接口函数表的所以无论上面语言 只要支持这样的内存结构描述 就可以定义接口‘com接口的vtable 和 class的vtable的完全一致 (类的虚函数表)由此可知 C++的虚函数表特性设计和COM的接口规范设计完全一致如果用c语言来表示特性的话 则会相对麻烦一点2.2.4 接口描述语言IDLIDL用于定义com接口和常用的数据类型。
2025-01-24 09:40:12
911
原创 opencv 学习(2)
实现车辆的过线检测 并对过线车辆进行绘制操作 识别之后 对数字进行统计。2: 将python的安装路径放到window的环境变量里面。import cv2 显示没有cv2这个模块?可以看到这里有对应的值就要选着。1: 安装python。
2025-01-09 20:17:56
445
原创 opencv 学习(1)
ffmpeg 调用opencv 主要是在filter里面 采集图片后 opencv进行图像的渲染 之后再进行处理 或者反过来 直接拿图片的数据 然后再filter里面进行渲染之后 进行视频和音频的播放。opencv 调用ffmpeg主要是多媒体文件的处理 opencv需要把用户传上来的数据 非原始数据给ffmpeg 转换成原始数据之后再进行处理。计算机视觉是 利用计算机达到人眼的效果 可以分析视频中的内容或者生活中的东西。从电脑到照片 这叫做机器渲染 从照片到电脑 这个叫做计算机识别。
2025-01-07 11:28:39
495
原创 关于Qxorm(多态插入数据)
题主本来是奔着不影响原来表的情况下 也不加一套增删改查的接口去研究了一下 qxorm动态插入的特性。如果传入的指针是B的指针 然后用的是A的一套接口去增删改查 注意要使用这部分指定的公共接口。2: 新增加一个表 需要吧原来增删改查相关的接口 全部加一套(qxorm的)特性。查找了很多资料 最终得到了相关的解决方式 是可以多态的插入相关的。然后B类继承A类 (B类是我原来需要新增的映射表类)在增删改查中 实际上是操作的是 B 映射类中的表。3: 研究qxorm的动态插入相关的特性。
2024-12-20 11:27:18
214
1
原创 报错 QObject::connect: Cannot queue arguments of type
确保这种问题的核心是类型未注册为 Qt 的元类型。在代码中注册类型(使用声明模板类型。确保跨线程信号槽连接时使用的参数是 Qt 能识别的类型。通过以上步骤可以彻底解决这个问题,使在信号槽中正常传递,无论是在单线程还是多线程环境中。
2024-12-20 11:16:34
751
原创 jenken 打包linux包遇到的问题(环境变量)
解决方案在 相关程序的make之前 把环境变量加在前面 我这里直接将变量加载代码的最前面。我们jenkens 打包的时候 远程打包 通过ssh 去在服务器上调用脚本。环境变量没有去自动加载 代码打包的时候总是提示相关的so文件找不到。
2024-11-29 17:10:50
262
原创 AAC ADTS格式分析
这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。**比如:**number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有⼀个AAC数据块。且这两种的header的格式也是不同的,⽬前⼀般编码后的和抽取出的都是ADTS格式的⾳频流。:表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧。是AAC⾳频的传输流格式。采样率 根据音频设置。
2024-11-13 09:30:02
748
原创 ffmpeg内存模型
当我们进行浅拷贝的时候 AVBuffer里面的 refcount就会+1 表示有多一个指向此范围的结构体。当释放引用共享空间的packet的时候 这个计数就会-1 当计数为0的时候 就会释放掉引用的缓存空间。av_packet_clone克隆一份 实际就是加上申请空间然后再进行数据赋值。1: 两个packet的buf引用的是同一个数据缓冲空间,类似与浅拷贝。2:两个packet的buf引用的是不同的数据缓冲空间,类似与深拷贝。如果这里有数据的话 则会简单的进行指针的拷贝。然后将相关的引用计数给+1。
2024-11-12 15:42:16
632
原创 ffmpeg编程入门
封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。AVStream视频文件中每个视频(音频)流对应一个该结构体。编解码器上下文结构体,保存了视频(音频)编解码相关信息。AVCodec每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。AVPacket存储一帧压缩编码数据。AVFrame存储一帧解码后像素(采样)数据。
2024-11-12 14:35:19
1165
原创 SDL读取PCM音频
/ 拷贝数据到stream并调整音量 将设置流设置给SDL并进行播放 将s_audio_pos指针的位置向前挪动。// 设置静音的值,因为声音采样是有符号的,所以0当然就是这个值。// userdata:SDL_AudioSpec结构中的用户自定义数据,一般情况下可以不用。// 数据够了就读预设长度,数据不够就只读部分(不够的时候剩多少就读取多少) 可读取的数据长度。// 音频缓冲区中的采样个数,要求必须是2的n次。// 当pause_on设置为0的时候即可开始播放音频数据。// 用户自定义的数据。
2024-11-08 17:40:51
1337
原创 SDL打开YUV视频
这可以通过用户点击窗口的关闭按钮(如窗口右上角的 “X”)或通过其他机制关闭窗口(例如按 Alt+F4)来触发。在事件循环中检测到 SDL_QUIT 后,通常会执行相应的退出操作,如设置退出标志(s_thread_exit = 1),从而安全地终止程序或线程。单独用一个子线程给主线程发送刷新画面的事件 主线程负责刷新画面 每次发送刷新画面的命令后就延迟一段事件 具体的帧率公式为1000 / 延迟事件 = 帧率。接受窗口变化的消息 实时更新窗口的尺寸 根据窗口和视频部分的比例。
2024-11-08 16:25:48
677
转载 ExpiringLruCache.hpp 是一个带有过期功能的 LRU 缓存类模板
它使用 QMap 和 QList 来管理缓存项,支持自定义缓存容量和元素的生存时间 (TTL)。构造函数:可以设置缓存的最大容量 (mCapacity) 和生存时间 (mTtl),以秒为单位。insert():插入键值对,若达到容量限制,移除最少使用的项。value():根据键获取值,若键不存在或已过期则返回默认值。find():检查键是否在缓存中,并根据TTL判断是否过期。touch():更新访问时间,将最近使用的键移到开头。contains():判断缓存中是否包含某个键。clear():清空缓存。
2024-11-08 14:29:08
45
原创 SDL线程
创建子线程 子线程先拿到锁 休眠10s后 释放锁并等待信号量。主线程拿到锁 发送信号量 唤醒子线程 休眠10s后 释放锁。这里面的信号量什么的 和 规范的那一套逻辑设计的是一样的。之前学过线程信号量相关的知识 在这里也是更换了一下函数。主线程等待子线程结束后 结束流程。子线程拿到锁 输出文本并释放锁。
2024-11-08 11:27:10
552
1
原创 SDL渲染器和纹理
使用SDL_CreateTextureFromSurface加载图像文件生成纹理,或者通过SDL_CreateTexture创建空白纹理。创建渲染器:SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);加载纹理:通过SDL_CreateTextureFromSurface(renderer, surface);渲染纹理:使用SDL_RenderCopy(renderer, texture, NULL, &rect);
2024-11-08 10:12:59
765
1
原创 SDL简介和初次尝试
官网机翻介绍:Simple DirectMedia Layer 是一个跨平台开发库,旨在通过 OpenGL 和 Direct3D 提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。它被视频播放软件、模拟器和流行游戏使用,包括 Valve 的获奖目录和许多 Humble Bundle 游戏。SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台开发库 ,使用C语言写成,SDL提供了数种 操作 图像 ,声音输入输出的函数,让开发者使用 相识的代码 就能够开发出跨平台的应用软件。
2024-11-08 09:42:42
686
原创 QShareMomery在linux上出现的问题
这段代码的逻辑是,在检测到共享内存 app 已经存在的情况下,通过 attach 和 detach 方法来清理残留的共享内存,从而为新的实例创建共享内存。这种代码在window上可以正常运行 因为window上面的内存是内核持有的,当拥有QSharedMemory的线程或者进程退出的时候 window上就会自动释放掉相应的内存空间 下一次再启动的时候 就可以正常启动。它只能释放那些由于异常退出而未被释放的共享内存。再次创建内存:如果残留的内存被清理成功,create 会成功,否则会再次失败并显示错误消息。
2024-11-07 09:08:32
1106
原创 debian系统安装qt的时候 显示xcb相关文件缺失
我们可以选择使用ldd的命令查看当前依赖的so那些文件确实。如果你的系统也有类似的问题 可能是相似的问题导致的。本人在进行打包的时候 出现则会个报错。但是我的软件源并没有给我找到这个文件。下载完后dpkg 对应的包就好了。下面这个网站去下载自己缺失的包。由于系统有缺失 只能通过。如果是安装之后的问题。
2024-11-06 14:17:54
569
原创 qt 如何在本地进行打包
windeployqt.exe 是 Qt 提供的一个命令行工具,用于自动化打包 Qt 应用程序时所需的依赖文件。这对于 QML 应用程序是必需的,确保 qmlimportscanner 能够找到相关的 QML 文件。-qmldir=D:\app\Qt\5.15.1\msvc2019\qml: 如果你的项目用到了qml 那么需要指定qml的路径。确保在使用 windeployqt 之前,Qt 的环境变量已正确设置,这样它才能找到必要的文件。不复制翻译文件,适用于不需要多语言支持的应用程序。
2024-11-01 09:39:35
571
原创 boost事件处理(信号与槽)
不过,Boost.Function 和 Boost.Signals 之间的一个主要区别在于,Boost.Signals 能够将一个以上的事件处理器关联至单个事件。由于 connect() 会返回一个类型为 boost::signals::connection 的值,它们可以通过其它方法来管理。boost::signal 的 disconnect() 方法需要传入一个函数指针,而直接调用 boost::signals::connection 对象上的 disconnect() 方法则略去该参数。
2024-10-14 14:30:48
614
原创 boost函数对象
boost::ref 是 Boost 库中的一个实用工具,它主要用于解决在函数对象作为参数传递时可能出现的拷贝代价过高、不希望拷贝对象或禁止拷贝对象的问题。通过使用这些占位符,boost::bind() 可以变为一元、二元或三元的函数。因为传给 boost::bind() 的参数是以值方式传递的,所以 std::cout 不能直接使用,否则该函数会试图创建它的一份拷贝。通过使用模板函数 boost::ref(),象 std::cout 这样的流就可以被以引用方式传递,也就可以成功编译上面这个例子了。
2024-10-14 13:37:35
773
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人