自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(588)
  • 资源 (15)
  • 收藏
  • 关注

转载 Qt-VLC: 一个集成VLC的开源跨平台媒体播放库

Qt-VLC是一个将 VLC 媒体框架与 Qt 集成的开源库,VLC 是强大的跨平台媒体播放框架,支持几乎所有音视频格式和流媒体协议 ,而 VLC-Qt 则简化了 Qt 与 VLC 的集成,让开发者能快速在 Qt 界面中实现媒体播放功能。VLC-Qt 是对 VLC 核心库(libvlc)的 Qt 封装,提供了 Qt 风格的 API(如 QObject 派生类、信号槽机制),支持:本地 / 网络音视频文件播放(MP4、MKV、MP3 等);流媒体播放(RTSP、HTTP 流等);

2026-05-19 16:44:05 62

转载 concurrentqueue:一个高并发高性能的C++无锁队列

在多线程 编程中,concurrentqueue(并发队列)是一种支持多线程安全访问的队列数据结构,主要用于解决多个线程同时进行 “入队(enqueue)” 和 “出队(dequeue)” 操作时的数据竞争问题,确保线程安全和数据一致性。生产者 - 消费者模型:生产者线程往队列中写入数据,消费者线程从队列中读取数据,通过队列协调线程间的数据传递。任务调度:线程池中的任务队列,多个工作线程从队列中获取任务执行。实现方式1)基于锁的实现(Lock-based)通过互斥锁(mutex。

2026-04-16 14:33:52 86

转载 Qt编程:Qt 中常用的宏和函数

以下是 Qt 中常用的宏和函数分类详解:作用:启用类的信号槽、属性系统、动态翻译等特性。必须放在类的私有部分,且需要运行 moc(元对象编译器)预处理。示例:作用:声明类的属性,支持动态访问(通过 和 )。参数:属性名、类型、读写函数、通知信号等。示例:作用:标记成员函数可从元对象系统调用(如 QML 或 )。示例:信号与槽(Signals & Slots)作用:声明信号(无需实现,由 moc 生成)。示例:作用:声明槽函数(可以是 、 或 )。示例:作用:触发信号(实际

2026-04-16 11:47:27 41

转载 Qt多线程编程

在Qt中进行多线程编程,可以利用Qt提供的多种机制和类来简化并发任务的处理。Qt支持C++11及之后的标准中的std::thread,但更推荐使用其自身提供的一些高级抽象,如QThread、QThreadPool、QtConcurrent等,这些工具能够更好地与Qt的事件循环机制集成,并提供了更便捷的任务管理和同步方式。

2026-04-16 11:23:39 31

转载 QSerialPort使用详解

SerialPort 是 Qt 框架中 Qt Serial Port 模块的核心类,用于在跨平台(Windows , Linux, macOS, QNX 等)环境下进行串行端口(COM 口/TTY)的读写操作。它提供了同步和异步两种操作模式,但在 Qt 开发中,,以避免阻塞主线程(UI 线程)。

2026-04-02 17:50:25 81

转载 IO 流揭秘:高效数据读写的最佳实践

如果要支持cin和cout的标准输入输出,

2026-03-31 17:40:40 57

转载 c++ std::tuple的用法

std::tuple 是C++11引入的一个模板类,它允许将多个不同类型的值组合成一个单一的对象。类似于结构体,但不需要预先定义类型名称。tuple(元组)是一个固定大小的异构值集合,可以包含不同类型的元素。它是 std::pair 的泛化版本,pair 只能保存两个元素,而 tuple 可以保存任意数量的元素。本质是编译期定长、运行时不可变长的“通用结构体”。

2026-03-31 16:33:42 31

转载 C++ 模板元编程

作用:模板特化是处理泛型编程中 “特殊情况” 的关键工具。它让我们能够为特定的数据类型提供更高效、更安全或逻辑上更正确的实现。函数重载 vs. 函数模板特化:虽然有时可以使用函数重载来达到类似目的,但特化提供了更细粒度的控制,它仍然是同一个模板家族的成员,只是行为被定制。而重载则是定义一个全新的、独立的函数。在某些情况下,编译器选择重载函数比选择特化版本更复杂,因此通常推荐使用特化来处理特定类型。

2026-03-31 16:12:53 61

转载 C++11并发支持库 -- 异步 future

想象你在主线程启动了一个耗时的计算任务(比如在一个新线程中),std::future 就是主线程用来查询和接收这个任务结果的信封。生产者 (Producer): 异步任务(在新线程中运行),负责计算结果并将结果或异常放入一个共享状态。消费者 (Consumer): std::future 对象(在主线程中),负责访问共享状态中的结果。共享状态 (Shared State)对象不直接存储结果,而是引用一个共享状态。任务的结果(如果任务有返回值)。任务执行过程中可能抛出的异常。任务是否已经完成。

2026-03-31 10:51:21 26

转载 深入浅出 C++14 新特性与实践

C++14 是 C++11 的补充和改进版本,它在 C++11 的基础上进行了一些增强和修复,尤其是在语法、性能和库的使用上。

2026-03-30 10:56:24 33

转载 QJSEngine(JavaScript引擎)

如果将指向 QStringList 的非空指针传递给它,如果脚本抛出未处理的异常,它将设置为“堆栈帧消息”列表,否则将设置为空列表。当从 C++ 返回时,引擎将中断正常的执行流程并使用包含 message 的错误对象调用下一个预注册的异常处理程序。脚本代码中的非局部变量将被创建为全局对象的属性,以及全局代码中的局部变量。如果给定的对象在引擎控制之外被删除,任何通过 JavaScript 包装对象(通过脚本代码或 C++)访问已删除 QObject 成员的尝试都将导致脚本异常。

2026-03-24 17:03:55 52

转载 Qt设置常见窗口背景色几种方式

总结qt 常见设置QWidget 类 型窗口背景色几种方式。3、自定义窗口paintEvent。

2026-03-24 10:29:07 52

转载 C++ 正则表达式

正则表达式(Regular Expression,简称 regex)本质上是用一段特定格式的字符串来定义某种文本模式,通过该模式可检验目标字符串是否符合预设特征。它是处理字符串匹配、检验、替换等操作的高效工具。简单来讲,正则表达式可被视为一种用于字符串模式验证的“规则模板”。例如,正则表达式“ab+”定义的模式为“一个字符'a'后跟随一个或多个字符'b'”,因此字符串“ab”“abb”“abbbbbbbbbb”均符合该模式要求。

2026-03-20 15:40:32 86

转载 内存池学习笔记(附C++完整实现)

总结内存池是一种预分配内存并进行重复利用的技术,通过减少频繁的动态内存分配与释放操作,从而提高程序运行效率。内存池通常预先分配一块大的内存区域,将其划分为多个小块,每次需要分配内存时直接从这块区域中分配,而不是调用系统的动态分配函数(如new或malloc)。简单来说就是申请一块较大的内存块(不够继续申请),之后将这块内存的管理放在应用层执行,减少系统调用带来的开销。

2026-03-20 13:58:25 28

转载 C++ 基础核心知识

指针的适用场景动态内存分配(new/delete):例如创建动态数组int* arr = new int[10]、自定义类的动态对象;遍历复杂数据结构(链表、树、图):通过指针移动访问下一个节点node->next,实现灵活的内存遍历;处理可选参数:允许传递nullptr表示“无参数”,适配多场景函数调用;多级间接访问:如指针的指针int** p,适用于二维数组、函数内修改外部指针;函数返回多个值:通过指针将结果输出到函数外部。引用的适用场景。

2026-03-20 11:41:10 40

转载 C++ STL 学习笔记

vector 性能优化:批量插入前用reserve(n)预分配容量,减少扩容次数;元素删除安全写法:依赖erase返回值更新迭代器,避免迭代器失效;复杂对象优先用 emplace_back:避免临时对象拷贝/移动开销,提升效率;哈希容器优化:通过reserve(n)减少rehash,自定义哈希函数降低冲突;避免过度依赖 vector:中间频繁插删时,list效率远高于vector;

2026-03-20 10:41:15 27

转载 C++ 面向对象

将类的数据(成员变量)和操作数据的方法(成员函数)打包在一起,通过访问修饰符限制外部对内部数据的直接访问,仅暴露指定接口供外部调用。让一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法,并可在父类基础上扩展新功能,实现代码复用。“同一接口,不同实现”——通过父类指针/引用指向子类对象,调用相同函数时,根据对象的实际类型执行不同逻辑,大幅提升代码扩展性。

2026-03-19 17:19:18 50

转载 std::shared_ptr和std::unique_ptr有什么区别?

共享所有权:std::shared_ptr 表示共享所有权,允许多个 std::shared_ptr 实例共享同一个对象的所有权。std::shared_ptr 和 std::unique_ptr 都是 C++ 标准库中提供的智能指针,用于管理动态分配的对象的生命周期,但它们之间有一些重要的区别。复制 std::shared_ptr 会增加引用计数,销毁 std::shared_ptr 会减少引用计数。但是,多个 std::shared_ptr 之间的赋值和比较操作仍然是非原子的,需要适当的同步机制。

2026-03-18 11:16:11 36

转载 C++11新特性

(*)std::weak_ptr的成员函数: use_count( std::shared_ptr引用个数)、expired(对象是否不存在) 、 reset(重置,弱引用计数减1)、lock(返回std::shared_ptr) =nullptr(弱引用计数减1)..,全局变量、局部静态变量默认捕捉可用。(*)std::mutex、std::timed_mutex、std::recursive_mutex与std::recursive_timed_mutex互斥量类。//还有sleep_until。

2026-03-18 11:05:02 69

转载 Visual Studio 2022 + Qt6.10.1 安装和搭建攻略

3.安装选择(使用C++的桌面开发、Visual Studio扩展开发)前者是选择的开发环境,后者是为了装插件。4.注意Visual Studio 2022的MSVC默认是2022 64位,Qt6.10.1默认也是2022 64位。点击ADD ,Location选择C:\Qt\6.10.1\msvc2022_64\bin\qmake打开。注意:该路径依据实际安装路径,我的是C:\Qt\6.10.1\msvc2022_64\bin。输入qt搜索出现Qt Visual Studio Tools,点击安装。

2026-03-09 11:46:11 363

转载 Visual Studio2022离线安装完整教程

一、下载离线安装包(联网机器操作)下载地址:VS 2022 Community。

2026-03-02 15:59:58 9570

转载 D指针/Q指针在C++中的使用

子类FooC类的定义不变,再发布成test.dll,供应用程序app.exe调用(假设app.exe没有重新编译),那么对于app.exe来说,FooC类的内存布局中m_future的相对偏移为x,而实际上由于Foo中加入了成员变量m_previous,导致运行时FooC类的内存布局中m_future的相对偏移不再是x了。#define QPTR(Class) Class *q = static_cast<Class *>(q_ptr) //q_str实际指向private对应的类的对象,

2026-03-02 10:45:35 46

转载 QT项目文件(.pro)指南

自定义宏定义# 条件功能启用# 根据Qt版本条件编译qt5 {# Qt5特有配置# Qt6特有配置# 自定义预处理命令# 后构建步骤(如复制文件)win32 {# 前构建步骤。

2026-02-25 17:44:02 67

转载 C++11实战:手把手教你写个线程池

自从C++11 直接内置线程库后,再也不用靠操作系统API裸奔写并发了!但是呢,这标准库给的多线程支持还是太基础了!想整点高级活儿比如线程池、信号量啥的,还得咱自己动手丰衣足食。比如面试聊到线程池,面试官一问:“说说原理?你张口就来:“任务队列 + 线程队列,循环分配呗!”听着贼溜,可真让你写代码?立马原地懵圈——因为C++的std::thread一旦跑完函数就自爆了,根本没法复用!那咋整?别慌!

2026-02-24 15:49:25 33

转载 Qt网络编程:TCP与UDP实战指南

Qt Socket 通讯提供了简洁、高效的 API,支持 TCP 和 UDP 协议。通过信号与槽机制,可以轻松实现异步网络操作。在实际开发中,需要注意数据粘包、编码、超时等问题,并根据业务场景选择合适的协议(TCP 用于可靠传输,UDP 用于实时性要求高的场景)。

2026-02-24 10:54:34 34

转载 Qt C++ 插件开发指南:插件架构设计与动态加载实战

本文详细介绍了Qt插件开发的核心技术与实践方法。主要内容包括:1. Qt插件架构原理:基于元对象系统的接口识别和动态加载机制,支持跨平台二进制扩展。2. 开发流程详解:通过文本处理器案例,分步讲解接口定义、插件实现和主程序加载。3. 关键技术点:QPluginLoader动态加载、Q_INTERFACES接口声明、插件元数据配置等。4. 高级特性:插件通信机制、依赖管理、版本控制和跨平台注意事项。5. 最佳实践:提供调试技巧和扩展方向建议,如热重载、配置管理等。该方案实现了应用程序功能的模块化扩展,具有低耦

2026-02-24 10:48:22 135

转载 QT QByteArray 的用法

另外,QByteArray 确保 size() 位置的字节始终为 '\0',这样就可以使用 data() 和 constData() 的返回值 作为期望以 '\0' 结尾的字符串的函数的参数。尽管 size() 为 5,但字节数组在末尾还保留了一个额外的 '\0' 字节,因此如果请求指向底层数据的指针(例如调用 data()),则指向的数据保证以 '\0' 结尾。size() 函数总是返回整个数组的大小,包括嵌入的 '\0' 字节,但不包括 QByteArray 添加的终止 '\0'。

2024-07-25 14:13:57 1038

转载 QT读写配置ini文件

一、概述Qt中常见的配置文件为(.ini)文件,其中ini是Initialization File的缩写,即初始化文件。Qt中使用类来完成读写ini文件的操作。

2024-07-25 11:15:27 723

转载 单线程读 单线程写一个变量是否一定要加锁

不存在对a读一半或写一半的问题。可能又有新的疑问,这样且不是说对a的操作是原子了,那样的话何必还需要原子变量的类型了,而且对a的操作也不是一条指令能完成的啊。保证了原子性后还有一个可见性问题,写线程改变了变量的值读线程不一定能够立马读到改变后的值,但是如果我们可以接受这种延时读取完全可以不做任何额外的处理(比如我们一个值表示当前的池子中的水位,我们写线程加水后把表示水位的值改变为新的状态我们读线程取水,这次取不到可以下次取),当然这个问题也可以通过voliate关键字来解决,最暴力的手段当然还是加锁。

2024-06-26 18:01:16 1005

原创 WPF程序中 Invoke的使用

【代码】WPF程序中 Invoke的使用。

2024-06-26 13:33:34 703

原创 ps 抠图生成png

2、如果是纯色底图,使用魔棒工具选择,否则使用快速选择工具,选择图形背景。3、反选使用ctrl + shift + i。1、解锁图层,添加新图层,老的图取消眼睛。5、ctrl+j生成新图层。

2024-06-25 20:28:38 770

转载 QT使用QLabel控件显示图片,报错:QPixmap::scaled: Pixmap is a null pixmap

Label 和 pushButton 两个控件 实现点击 按钮 标签显示图片的功能Widget.cpp 同级目录img中有图片 1.png但是点击后报错:QPixmap::scaled: Pixmap is a null pixmap 在网上看了很多帖子:经过多方面尝试最后发现是图片格式的问题解决方案:先用QFile把文件的内容全部读取出来,然后再用loadData()来加载数据。猜测可能原因:内存对齐后,用load函数载入的时候都是按照32位深度来载入。

2024-05-08 17:30:07 1070

转载 C++ 内存池介绍与经典内存池的实现

内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请内存,这样做的缺点在于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。

2024-05-08 10:32:01 1834

转载 SetThreadAffinityMask用途

是线程的前一个亲缘性屏蔽。例如,可能有一个包含4个线程的进程,它们在拥有4个CPU的计算机上运行。如果这些线程中的一个线程正在执行非常重要的操作,而你想增加某个CPU始终可供它使用的可能性,为此你对其他3个线程进行了限制,使它们不能在CPU 0上运行,而只能在CPU 1、2和3上运行。该函数中的 hThread 参数用于指明要限制哪个线程, dwThreadAffinityMask用于指明该线程。//线程1,2,3只能在cpu 1,2,3上运行。//线程0只能在cpu 0上运行。

2024-05-07 16:24:23 492

转载 c++多线程编程中的原子操作InterlockedIncrement和InterlockedDecrement用法详解

在这个修改后的示例中,通过使用InterlockedIncrement和InterlockedDecrement函数,将计数器的递增和递减操作改为原子操作,确保了对共享变量的安全访问,避免了竞态条件和数据竞争的发生。在上面的示例中,多个线程同时对计数器进行递增和递减操作,由于counter++和counter--不是原子操作,可能会导致竞态条件和数据竞争的发生,从而导致计数器的最终值不确定。在多线程编程中,除了原子操作外,还需要考虑其他同步机制,如互斥锁、条件变量等,以确保程序的正确性和性能。

2024-05-07 16:08:52 976

转载 完成端口 UDP GetQueuedCompletionStatus 异常处理

分析原因:Work线程GetQueuedCompletionStatus出错后直接countinue跳到下一次循环,没有投递数据接收请求,则GetQueuedCompletionStatus取不到数据接收结果,陷入阻塞,于是数据收发也都停下了。重新调整,在GetQueuedCompletionStatus出错后用WSARecvFrom 投递接收请求,再执行countinue,运行验证,GetQueuedCompletionStatus再出错时程序可以继续保持与其他客户端的通信了。

2024-05-07 14:15:00 445

转载 原子操作InterlockedExchange系列

操作,则ThreadA它就可以退出while循环,然后获取资源,并且,它对g_fResourceInUse设置为TURE,其它线程(假使ThreadC)如要使用,则将如刚才ThreadA般等待。可以用InterlockedExChange来实现循环锁的功能,所谓循环锁,就是在线程1中如果要对变量进行操作,要先查看这个变量(或资源)有没有被其它线程用到,如果是,则一直循环,则到其它线程放弃对该变量(或资源)的控制。不用其他互斥量,只为提升效率)//Access the resource. //获取资源。

2024-05-07 10:14:42 275

转载 VC++线程池1

在一般的设计中,当需要一个线程时,就创建一个,但是当线程过多时可能会影响系统的整体效率,这个性能的下降主要体现在:当线程过多时在线程间来回切换需要花费时间,而频繁的创建和销毁线程也需要花费额外的机器指令,同时在某些时候极少数线程可能就可以处理大量,比如http服务器可能只需要几个线程就可以处理用户发出的http请求,毕竟相对于用户需要长时间来阅读网页来说,CPU只是找到对应位置的页面返回即可。之后当指定的时间片到达,就会将对应的回调历程放入到队列中,一旦线程池中有空闲的线程就执行它。

2024-04-30 17:19:54 223

转载 C中kbhit()和getch()

【代码】C中kbhit()和getch()

2024-04-29 14:39:36 658

转载 wpf 软件因为中文名字无法启动

WPF软件因中文名无法启动,原因竟是英特尔驱动WPF软件因中文名无法启动,原因竟是英特尔驱动。

2024-03-25 10:08:47 974 1

23种设计模式

23种设计模式 pdf格式 很清晰

2017-02-20

林锐_高质量C++编程指南

林锐_高质量C++编程指南 高清版 提高编程质量 你值得拥有

2017-02-21

Qt从入门到精通

Qt从入门到精通 高清版 学习入门的好书

2017-02-21

mfc设置鼠标光标

在程序中,我们有时候会想要设置自己设计的鼠标光标,那么这个demo讲给你一个很好启发。

2014-10-22

mouse_event_test.rar

此demo是用mouse_event来模拟鼠标,分别用相对坐标和绝对坐标做了测试,是一个不错的例子。

2014-10-28

pkcs11商密demo

pkcs11接口的商密demo,很不错的,能用到工程中。

2017-02-20

WINDOWS核心编程

WINDOWS核心编程 chm版本 很清晰 学习windows编程的得力助手

2017-02-21

c++windows服务

windows中创建服务的类,可以直接使用。

2017-02-20

名企面试100题系列

名企面试100题系列 面试必备 高清版

2017-02-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除