喵个咪的博客喵个咪的博客
喵个咪的技术与生活
文章列表
文章分类
文章标签
时间线
喵个咪的技术与生活
文章列表
文章分类
文章标签
时间线
健康养生 2Python编程 5随笔日志 1产品设计 1C++编程 10运维技术 34Flutter编程 12编程技术 67设计模式 1汽车 1Go编程 64架构设计 3游戏开发 13量化开发 6物联网开发 7GoWind风行 41生活杂记 1
Qt 优雅实现线程安全单例模式(模板化 + 自动清理)

Date: 1/1/2020Category: C++编程Tag: C++, Qt

在 Qt 开发中,单例模式是高频使用的设计模式,用于全局共享一个实例(如配置管理、网络服务、日志系统等)。一个健壮的 Qt 单例需要满足 线程安全、自动清理、通用性强、支持任意构造参数 等核心需求。本文将基于模板封装 + 管理器的设计思路,实现一套可直接复用的单例框架,并详细讲解其设计原理与最佳实践。

一、单例模式的核心诉求

在 Qt 环境中,单例的设计需要解决以下关键问题:

  1. 线程安全: 多线程并发调用时避免创建多个实例;
  2. 自动清理: 程序退出时自动释放资源,避免内存泄漏(尤其配合 Qt 的 QCoreApplication::aboutToQuit 机制);
  3. 通用性: 支持任意类作为单例,无需重复编写单例逻辑;
  4. 灵活构造: 支持带参数的构造函数,且不丢失参数语义;
  5. 安全校验: 避免未初始化就调用实例的错误;
  6. 可手动控制: 支持主动初始化 / 销毁单例。
Qt6 QML 自定义 DateTimePicker 组件:完整实现与使用指南

Date: 1/1/2020Category: C++编程Tag: C++, Qt

在 Qt 开发中,原生的日期时间选择组件往往难以满足个性化的 UI 设计和交互需求(如深色主题、自定义时间范围、键盘导航等)。本文基于 Qt6.10 版本,从零实现一款功能完整、交互友好的 DateTimePicker 组件,支持日期 + 时间联动选择、时间范围限制、键盘 / 鼠标双交互、深色主题适配等特性,可直接集成到 QML 项目中。

一、组件核心特性

特性 说明
深色主题适配 内置统一的深色系样式常量,支持快速切换主题
完整时间维度选择 支持年、月、日、时、分、秒全维度选择,日历网格可视化展示
时间范围限制 通过 minDateTime/maxDateTime 限制可选时间范围,禁用超出范围的选项
双交互模式 支持鼠标点击 / 悬停、键盘方向键 / Tab/Enter/Escape 操作
智能视觉反馈 选中状态高亮、禁用状态灰显、悬停效果、焦点区域提示
快捷操作 内置「今天」快捷按钮,一键恢复当前系统时间
自动月份切换 点击非当前月日期时,自动切换到对应月份
Qt 6 实战:C++ 调用 QML 回调方法(异步场景完整实现)

Date: 1/1/2020Category: C++编程Tag: C++, Qt

在 Qt 6 开发中,C++ 与 QML 混合编程是常见场景。当 C++ 处理异步操作(如登录验证、网络请求、数据库查询)时,需要将结果通知给 QML 界面,回调函数是最直观的通信方式之一。本文将基于你提供的代码框架,补充关键细节、修复潜在问题,并完整实现从 C++ 调用 QML 回调的全流程。

一、核心场景说明

我们需要实现:

  1. QML 调用 C++ 的 login 方法(传入用户名、密码和两个回调函数:成功回调 onSuccess、失败回调 onFailure);
  2. C++ 异步处理登录逻辑(模拟耗时操作);
  3. 登录完成后,C++ 调用对应的 QML 回调函数,将结果(成功响应 / 错误信息)传递给 QML。
libuv实现定时器Timer

Date: 1/1/2020Category: C++编程Tag: C++, libuv
怎样把C++代码编译成WASM

Date: 1/1/2020Category: C++编程Tag: C++, WASM
C++ 类型转换:旧风格与四种新风格详解

Date: 1/1/2020Category: C++编程Tag: C++, 类型转换

在 C++ 编程中,类型转换是连接不同数据类型的重要手段。C++ 同时支持兼容 C 语言的旧风格强制转型,以及针对特定场景设计的四种新风格强制转型,后者在可读性、安全性和规范性上更具优势。本文将详细解析各类转换的语法、用途及核心差异。

一、旧风格(C-style)强制转型

C 风格强制转型包含两种语法形式,本质功能完全一致,仅括号位置不同:

  • 格式 1:(T) expression(将表达式转换为 T 类型)
  • 格式 2:T(expression)(函数式语法,效果同上)
C++ IDE:最适合 C++ 初学者的 IDE 是什么?

Date: 1/1/2020Category: C++编程Tag: C++, IDE

C++ 创建于 1985 年,是一种流行的编程语言,已经使用了 30 多年。这种面向对象的编程语言设计有多种功能设施,包括编译功能。它最初是为系统编程而构建的,但如今它已成为软件开发行业许多项目的绝佳选择。它可用于创建高性能应用程序,例如桌面应用程序、游戏和服务器。

C++ 作为 C 语言的扩展而构建,采用类进行设计,使其代码可重用。C++ 编程语言支持多种操作系统和集成开发环境 (IDE)。作为想要构建令人印象深刻的软件应用程序的初学者,您可能正在寻找 C++ 的最佳 IDE 来轻松构建和启动您的产品。使用本指南为初学者找到最好的 C++ IDE。

什么是 IDE?

关于C++嵌入Python引用protobuf引起的一个SIGSEGV错误的解决过程

Date: 1/1/2020Category: C++编程Tag: C++, Python

首先,我的应用场景是这样的,我是一个C++为宿主的程序,内嵌了Python,我C++里边有引用C++版的protobuf动态链接库。Python里边也有用到Python版的Protobuf。两者都用了同一版本的protobuf: 3.13.0。

因为我是插件式的系统,我单独测试Python脚本系统插件的时候,一切都是完美的。然后,我将插件集成到主程序里边去,就完犊子了。只要我在Python中import到protobuf的协议,主程序就会以SIGSEGV信号崩掉。

最终堆栈挂在了_message.cpython-35m-x86_64-linux-gnu.so的google::protobuf::DescriptorPool::FindFileByName()这里:

ASIO 定时器完全指南:类型解析、API 用法与实战示例

Date: 1/1/2020Category: C++编程Tag: ASIO

ASIO(Boost.Asio 或独立的 Asio)作为高性能异步 IO 库,提供了灵活且高效的定时器组件,适用于网络编程、异步任务调度、定时触发等场景。本文将系统梳理 ASIO 定时器的核心类型、底层实现、核心 API、实战示例及常见问题,帮助开发者快速掌握其使用方法。

一、ASIO 定时器核心类型解析

ASIO 提供 4 种常用定时器,均基于底层模板类实现,核心差异在于 时钟类型(决定精度、是否受系统时间影响)和 适用场景。先纠正一个常见误区:high_resolution_timer 并非 system_timer,二者是 basic_waitable_timer 的不同时钟特例化,属于并列关系。

ASIO的post和dispatch方法

Date: 1/1/2020Category: C++编程Tag: ASIO

关于这两个方法,我去网上找了一大堆资料,都没有讲清楚是怎么一回事。还是读了ASIO的源代码这才理解。

要提到这两个方法,不得不提一下Windows的两个API:SendMessage和PostMessage。

io_context::post跟PostMessage的行为差不多,投递完消息立即返回,Handler的执行跟它没有半毛钱的关系。

io_context::dispatch可以认为是SendMessage的超集,SendMessage是阻塞的,必须要在消息处理完成之后才返回,当io_context::dispatch在io_context的工作线程中被调用的时候,io_context::dispatch的行为和SendMessage是一致的,必须要在Handler调用完成之后才返回。但是,如果不是io_context的工作线程中调用,则执行了io_context::post一样的行为:将Handler投递到io_context的事件队列中去。