- 博客(155)
- 收藏
- 关注
原创 Qt报错信息Cannot send events to objects owned by a different thread
Qt要求对象只能被它所属的线程访问和操作。如果需要在不同线程中操作对象,必须使用信号和槽机制,因为Qt的信号和槽是线程安全的,能够自动处理跨线程通信。有一种方式可以调用,使用。
2026-08-19 16:20:14
235
原创 windows11打不开chm格式文件解决办法
大概率是 Windows 系统中解析 CHM 文件的核心组件(itss.dll 和 hhctrl.ocx)未正确注册或损坏。完成后关闭命令行窗口,重新打开 CHM 文件即可。
2026-08-03 08:50:05
178
原创 windows平台都有哪些UI开发库
在 Windows 平台上,UI 开发库(框架)种类繁多,各有侧重。EasyX、Qt、MFC、SDL、SDL_Image、Flutter涵盖了从底层图形绘制、传统桌面开发到现代跨平台框架的多个领域。
2026-07-17 14:42:25
189
原创 QString::fromLocal8Bit和QString::toLocal8Bit
如果你拿着一段 GBK 编码的中文数据,不经过翻译直接塞给 QString,Qt 就会把它当成错误的格式去解析,结果就是满屏的乱码。但是,我们平时接触到的很多外部数据,比如从旧系统读来的文件、Windows 系统的 API 返回值,它们往往不是 Unicode,而是各自操作系统默认的“本地编码”。如果你用它去解析网络传输的数据、跨平台保存的配置文件、或者数据库里的数据,大概率会出乱码。简单来说,它的作用是:把 Qt 内部通用的 Unicode(普通话),翻译成当前操作系统能听懂的本地编码(方言)。
2026-07-15 17:10:36
188
原创 Qt实现汽车仪表盘
摘要:作者基于Qt开发了一款模仿领克汽车仪表盘的UI界面,实现了时速表和转速表的动态效果,其中时速表指针可定时移动并与数字显示联动。该项目在UI细节调整上花费较多精力,整体效果良好。作者表示有兴趣的开发者可通过私信"仪表盘"获取项目源码。(96字)
2026-07-14 22:39:43
47
原创 Qt信号槽在使用中避免循环绑定
在object2的槽函数触发时,发送object2的信号,object1的槽函数会被触发,在object1的槽函数中,发送object1的信号,又会导致object2的槽函数触发,就会导致死循环。假设有两个Object, object1和object2。object1的信号绑定object2的槽函数。object2的信号绑定object1的槽函数。
2026-07-06 14:58:00
64
原创 关于QRunnable
可以用来在一个单独的线程中执行函数,比如继承自。默认会自动析构,如果不想让他析构,就要。这里可以看到确实是创建了一个新线程。自动析构了,原因是手册里有这样一句话。我们想验证是否在新线程中执行了。还有一个值得注意的是打印输出。也就是我们构造函数中写的。函数打上断点,开始调试。对象就不会自动析构啦。
2026-06-02 14:42:22
168
原创 Qt翻译时自己写ts文件
是必须要写的,是要翻译内容的所在类类名,如果有命名空间,需要加上。然后通过lrelease工具生成qm文件,进行加载。Qt翻译时自己写ts文件时。
2026-05-22 14:43:31
77
原创 音视频开发基本知识
所谓码率,通常可以理解为按照某种频率计算一定数据量的单位,重点体现在“率”上面,我们常说的码率统计时间单位为秒,所以码率也就是一秒钟的数据量,通常我们用bps(bits per second)来表示,也就是每秒钟有多少位数据。yuv420 表示4比2比0的yuv取样,水平每2个像素与垂直每2个像素(即 2 x 2的2个像素)中y取样4个,u取样1个,v取样1个,所以每2x2个像素y占有4个字节,u占有1个字节,v占有1个字节,平均yuv420每个像素所占位数为。它是衡量图像细节表现力的重要的技术参数。
2025-09-04 19:58:44
280
原创 关于智能指针
定义对象的时候,用强智能指针;引用对象的地方,使用弱智能指针。只是观察作用,观察资源还可不可用,但是却不能用。不能把智能指针new在堆上。在使用时必须进行提升。
2024-02-01 20:07:43
517
原创 3.2.6 手把手实现分布式锁
锁是一种资源,需要存储;同时要保证可用性,避免锁失效 ->一个进程多线程中的锁资源存储在进程中。加锁解锁行为是网络通信,需要锁超时->进程是资源的容器,线程是执行的单元。2.哪些锁是自己加锁自己释放锁?哪些是自己加锁,可能由别的线程释放锁?行为:加锁,解锁-》网络交互-》锁超时功能,由锁存储的所在节点来实现。加锁对象和解锁对象必须为同一个 -》除了因为网络异常而造成锁超时情况。重入锁和非重入锁:允许同一个线程多次持有锁。条件的判断是一个临界资源,需要互斥锁保护。怎么获知持有锁对象的释放锁行为?
2024-01-27 22:24:05
492
原创 3.2.5 手写内存泄漏检测组件
1.内存泄漏(a.是否有内存泄漏 b.在哪里有内存泄漏)2.try-catch调用malloc 没有调用free#include <stdio.h>#include <stdlib.h>int main(){ void *p1 = malloc(5); void *p2 = malloc(10); void *p3 = malloc(15); free(p1); free(p3); return 0;}上面这个程
2024-01-27 10:11:03
593
原创 3.2.4 手写死锁检测组件
其实要检测是否发生死锁,我们还要从锁上下手,我们要对锁的前后时机进行掌控,比如说现在是谁持有锁,谁想占用锁?而需要通过hook,让上锁,解锁操作调用我们自己的函数,这样,我们就能根据线程和锁记录一些关键信息,从而构建一个有向图,之后判断这个有向图是否成环就能知道是否发生了死锁。定义了五个线程,每个线程都持有一把互斥锁,线程一首先将r1上锁,之后sleep(1)等待线程二将r2上锁,依次,线程五将r5上锁后,等待r1被释放,然而线程1还在等待r2的释放,无法将r1释放,依次。至此,我们就可以完成死锁的检测。
2024-01-23 19:22:12
569
1
原创 桥接模式和NAT模式的区别
NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCPserver提供的,无法进行手工改动,因此虚拟系统也就无法和本局域网中的其它真实主机进行通讯。用桥接的话只要你在局域网内有合法的地址,比如你的ADSL猫是带路由功能的,假设在单位,那就要网管给你合法IP才行(如今公司都是mac和ip绑定的)。在桥接模式下,你必须手工为虚拟系统配置IP地址、子网掩码,并且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。桥接模式:虚机和物理主机可通信,可与外网通信。
2024-01-04 09:40:44
3135
1
原创 ubuntu18.04安装MySQL
(18.04/20.04不会提示输入密码,默认是没有密码)或者用lsof查看数据库默认端口3306。1.安装mysql服务器端。启动/停止/重启mysql。2.安装mysql客户端。3.安装mysql模块。
2024-01-03 16:59:32
934
原创 4.2.2 MySQL索引原理以及SQL优化
不要使用索引场景:没有where/group by/order by中使用,区分度不高的列,经常修改的列,表数据量少。准备 将SQL语句发送给服务器进行解析,编译和优化 生成一个执行计划并缓存。索引的代价:占用空间,维护的代价。数据结构:B+树索引、hash索引、全文索引(根据关键字索引全局)索引的使用场景:where、group by、order by。列属性:主键索引、唯一索引、普通索引、前缀索引。物理存储:聚集索引、辅助索引(二级索引)列的个数:单列索引、组合索引。索引的目的:提升搜索效率。
2023-10-31 14:27:32
181
原创 4.2.1 SQL语句、索引、视图、存储过程
范式可以避免数据冗余,减少数据库的空间,减小维护数据完整性的麻烦;但是采用数据库范式化设计,可能导致数据库业务涉及的表变多,并且造成更多的联表查询,将导致整个系统的性能降低;drop 快 删除整张表结构和表数据,包括索引、约束、触发器等 不能进行回滚。2.查询缓存 kv存储,命中直接返回,否则继续执行 8.0已经删除。范式二:确保表中的每列都和主键相关,而不能只与主键的某一部分相关。范式三:确保每列都和主键直接相关,而不是间接相关,减少数据冗余。5.执行器 根据执行计划,从存储引擎获取数据,并返回客户端。
2023-10-31 07:30:01
456
原创 Zookeeper分布式协调服务
Zookeeper是在分布式环境中应用非常广泛,它的优秀功能很多,比如分布式环境中全局命名服务,服务注册中心,全局分布式锁等。2.znode节点只存储简单的byte字节数组,如果存储对象,需要自己转换对象生成字节数组。临时性节点 rpc节点超时未发送心跳消息 zk会自动删除临时性节点。1.设置监听watcher只能是一次性的,每次触发后需要重复设置。永久性节点 rpc节点超时未发送心跳 zk不会删除这个节点。watch机制,当有些节点挂掉后,主动通知客户端。zk的数据是怎么组织的 -znode节点。
2023-10-30 16:42:06
229
原创 4.5.1 Nginx反向代理与系统参数配置conf原理
listen在master进程,connection在work进程。nginx ->进程 -> server。
2023-10-30 07:53:33
156
原创 2.3.1 协程设计原理与汇编实现
同步的编程方式,异步的性能。同步编程时,我们需要等待io就绪。但是在协程这里,我们使用一种机制,当io需要等待时,就切到下一个io,之后当之前的io就绪时,再切换回来继续处理就绪事件。5.协程的scheduler如何定义。b.不同体系机构,汇编代码不一样。7.如何与posix api兼容。4.协程的struct如何定义。9.协程的性能如何测试?1.为什么要有协程?汇编实现切换的优缺点。6.调度策略如何实现。
2023-10-26 18:09:08
423
原创 3.1.1手写线程池与性能分析
使用场景:如果一个锁持有临界资源的时间 (O(n))大于重新访问锁的时间,就用互斥锁。2.io密集型(网络io,磁盘io)两倍的核心数个。区别在于一个线程在执行临界资源,其他线程在干什么。某类任务特别耗时,严重影响该线程处理其他任务。自旋锁其他线程发现锁被占用时,一直循环等待。1.线程池是是什么,组成结构,为什么。互斥锁其他线程发现锁被占用时去做别的。线程池是管理维持固定数量的池式结构。消费者线程 取出任务,执行任务。3.线程池在开源框架中的应用。队列 存储任务 调度线程池。2.线程池实现 核心代码。
2023-10-22 20:20:52
205
原创 1.2.1 创建型设计模式
观察者模式:定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。策略模式:定义一系列算法,把他们一个个封装起来,并且使他们可相互替换。比喻:整洁的房间,好动猫,怎么保证房间的整洁?继承:无需修改原有类的情况下通过继承实现对功能的扩展。稳定点:一对多的依赖关系,一变化多跟着变化。前提:具体需求既有稳定点,又有变化点。设计模式是怎么来的?
2023-10-19 09:25:47
344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅