- 博客(93)
- 收藏
- 关注
原创 解码Qt HTTP+JSON实战(天气GET解析/百度AI POST封装)
本文介绍了JSON数据格式与Qt网络编程的核心内容。JSON是一种轻量级数据交换格式,支持对象、数组等结构,Qt通过QJsonDocument等类实现解析。HTTP协议基于TCP请求-响应模型,Qt使用QNetworkAccessManager等类进行网络请求。重点演示了通过GET请求获取天气API数据并解析JSON响应的完整流程,包括URL构造、请求发送、超时处理、错误检查和JSON解析等关键步骤。
2025-12-23 20:53:36
340
原创 解码Qt网络编程(UDP+TCP)
Qt网络模块开发指南摘要(150字): Qt网络模块通过QT += network引入,提供跨平台网络编程能力。UDP协议具有无连接、高效快速的特点,适用于实时数据传输。QUdpSocket类实现UDP通信,核心方法包括bind()绑定端口、writeDatagram()发送数据、readDatagram()接收数据。服务器需绑定端口监听readyRead信号,客户端可直接发送数据。示例展示了完整的UDP通信流程,包含错误处理和双向数据收发。该模块封装底层差异,简化网络应用开发。
2025-12-22 21:01:32
507
原创 解码QPixmap 图片自适应控件缩放与圆角处理
本文介绍了Qt中实现图片自适应控件尺寸并处理圆角显示的工具函数。通过分析QWidget::size()、QPixmap加载缩放、QPainter绘制等核心函数,详细说明了如何将图片等比例缩放至控件大小并适配圆角显示。关键步骤包括:获取控件尺寸、加载并缩放图片、创建透明画布、设置圆角裁剪路径、绘制缩放后的图片。函数支持保持宽高比或拉伸填充,并包含完善的错误处理机制,可广泛应用于各类Qt控件。
2025-12-21 22:02:35
572
原创 解码 Qt 交互:滑动交互、窗口拖拽
本文介绍了Qt框架中的QPoint类和QEvent类。QPoint类用于表示二维坐标点,支持坐标操作、向量运算和曼哈顿距离计算,常用于界面布局和位置处理。QEvent类是Qt事件系统的基类,封装了事件类型和处理状态,支持系统事件和自定义事件。文中提供了自定义滑动事件(SlideEvent)的完整实现示例,包括事件定义、窗口类实现以及鼠标事件处理逻辑,展示了如何通过事件机制实现窗口拖动功能。这两个类是Qt图形界面和事件处理的核心组件。
2025-12-20 18:30:08
1327
1
原创 解码Qt事件处理与自定义绘图
本文概述了Qt事件处理机制的核心概念与实现方式。作为事件驱动框架,Qt通过QEvent基类封装各类用户交互事件,包括鼠标、键盘、绘图等常见类型。文章详细介绍了事件调度流程:从QApplication初始化事件循环开始,到事件队列分发处理,直至程序退出。重点解析了鼠标事件处理,包括QMouseEvent和QWheelEvent的核心虚函数接口(如mousePressEvent、wheelEvent等),并提供了开启鼠标跟踪、处理坐标位置等实用代码示例。这些内容为开发者理解Qt事件模型提供了系统性的技术参考。
2025-12-19 18:41:10
977
原创 解码Qt 视图窗口与多界面组件
Qt视图窗口分为Item-Based和Model-Based两类:Item-Based(如QListWidget)直接操作控件项,耦合度高;Model-Based(如QListView)通过模型管理数据,实现解耦。摘要重点介绍了QListWidget的核心用法,包括添加文本/图标项、绑定自定义控件、常用信号槽交互(如获取选中项、双击删除)以及关键API。Item-Based控件适合简单场景,而复杂数据场景推荐使用Model-Based架构。
2025-12-18 22:18:01
1209
原创 解码Qt 对话框与文件操作
Qt对话框(QDialog)分为模态和非模态两种类型,模态对话框会阻塞用户输入,而非模态对话框允许同时操作其他窗口。Qt提供标准对话框如QFileDialog(文件选择)和QColorDialog(颜色选择),可通过静态函数快速调用。模态对话框使用exec()显示(应用级)或open()显示(窗口级),非模态对话框使用show()显示并需注意内存管理。父窗口参数决定对话框的显示位置和任务栏行为,nullptr时为顶层窗口,否则为子对话框。
2025-12-17 19:01:17
1348
原创 解码Qt布局管理器与样式表
Qt布局管理器概述:QLayout及其子类(QBoxLayout/QGridLayout/QFormLayout/QStackedLayout)自动管理控件位置和大小,支持动态调整、间距设置和尺寸适配。QBoxLayout提供水平和垂直布局方向,核心方法包括addWidget、addStretch等控制控件排列和空白分布。QVBoxLayout和QHBoxLayout作为常用子类简化了垂直/水平布局的实现。布局可嵌套使用,通过多层组合实现复杂界面排版。
2025-12-16 21:53:41
1281
原创 解码信号与槽(含 QTimer 应用)
Qt的信号与槽机制是其核心通信方式,通过元对象系统实现对象间灵活交互。信号是事件通知,槽是响应函数,通过connect连接。信号可带参数传递数据,槽函数需匹配参数类型和顺序。支持多种连接类型,如同线程直接连接和跨线程排队连接。使用前需继承QObject并添加Q_OBJECT宏,推荐Qt5+的函数指针连接方式确保类型安全。该机制简化了事件处理,实现了松耦合的组件通信。
2025-12-15 20:43:55
1057
原创 解码 Qt 核心技术 —— 组件、数据操作与多界面开发
本文介绍了Qt中的调试工具QDebug和字符串类QString的核心用法。QDebug支持C风格格式化和流操作两种输出方式,可方便打印调试信息,并可通过宏定义在发布时屏蔽输出。QString是Qt封装的Unicode字符串类,提供了丰富的字符串操作方法,包括构造、拼接、查找、子串提取、格式化等,解决了C语言char*的编码问题。文中通过代码示例详细展示了QDebug和QString的常用API及其参数说明,为Qt开发者提供了实用的调试和字符串处理参考。
2025-12-14 19:36:00
1202
原创 解码Qt Creator——安装配置与工程创建
Qt Creator安装与工程创建指南 本文详细介绍了Qt Creator在Windows系统的安装配置及工程创建方法。主要内容包括: 安装指南:从官网下载安装包,重点说明MinGW组件的选择(32位选MinGW32,64位选MinGW64),并强调环境变量配置的重要性。 工程创建:提供两种创建方式: 可视化方式:通过Qt Designer创建工程,说明各类模板用途及命名规范 纯代码方式:讲解.pro文件配置和main.cpp编写规范 程序运行原理:解析Qt程序从main函数启动的核心流程,包括QAppli
2025-12-13 17:39:44
1469
原创 解码智能指针
智能指针是C++中用于自动化资源管理的工具,旨在解决原始指针可能导致的内存泄漏问题。摘要如下: 原始指针痛点:手动管理资源易因提前返回、异常或遗漏导致泄漏。示例展示了构造函数分配内存、析构函数释放内存的模式,但存在资源泄漏风险。 智能指针概念:封装原始指针的类模板,通过重载操作符模拟指针行为,利用栈对象生命周期自动释放资源,确保资源安全释放。 废弃的auto_ptr:早期独占式智能指针,因拷贝/赋值时转移所有权导致原指针失效而被弃用,C++17移除。 shared_ptr:共享所有权智能指针,通过引用计数管
2025-12-12 21:22:21
825
原创 函数模板与类模板——泛型编程
C++模板是实现泛型编程的核心机制,通过将数据类型参数化提高代码复用性。函数模板允许将参数和返回值类型参数化,编译器根据调用时传入的类型实例化具体函数。模板支持自动类型推导或显式指定类型,并可通过特例化为特定类型提供定制实现。类模板还支持偏特化,为部分参数或修饰类型定制版本。模板与普通函数的主要区别在于代码生成时机、类型支持范围和隐式转换规则。模板重载时遵循普通函数优先于特化模板优先于通用模板的匹配顺序。合理使用模板能显著减少重复代码,但需注意可能导致的代码膨胀问题。
2025-12-11 21:10:03
793
原创 解码string类——字符串处理
String类是一个面向对象的字符串实现,基于basic_string<char>模板类,旨在解决C风格字符串的内存管理问题。其核心特性包括动态内存分配、丰富的字符串操作和高效的内存管理。类实现包含构造函数、析构函数、赋值运算符、字符串拼接、元素访问、容量管理、修改操作、字符串查找和比较等功能。通过私有辅助函数reallocate()实现内存的动态调整,支持resize()和reserve()等操作。类还提供了子串提取、交换和非成员比较运算符等实用功能,全面封装了字符串操作,避免了手动内存管理的
2025-12-10 20:45:08
319
原创 解码多态、虚函数——动态行为扩展
本文介绍了C++中的函数绑定机制和多态实现。函数绑定分为静态绑定(编译时确定)和动态绑定(运行时确定)。静态绑定通过函数重载实现,无运行时开销;动态绑定通过虚函数和继承实现,支持运行时多态。多态的核心是通过虚函数表(vtable)实现,派生类重写虚函数时更新表中地址。关键要素包括:public继承、虚函数重写和基类指针/引用调用。动态绑定过程通过虚指针查找虚函数表确定实际调用函数,实现"同一接口,不同行为"的多态特性。
2025-12-09 20:57:22
1457
原创 解码继承——代码复用与层次化设计
摘要: C++继承通过基类(如Mammal)与派生类(如Dog/Cat)的层次结构实现代码复用和扩展。基类定义共性(体温、呼吸方法),派生类添加特性(犬种、吠叫)。语法为class 派生类 : 访问修饰符 基类,派生类可调用基类方法(如showBasicInfo()),并支持多级继承(如GoldenRetriever→Dog→Mammal)。注意构造函数、静态成员等不继承。示例中,金毛犬继承狗类的属性和方法,同时扩展背带颜色等特有功能,体现"一般-特殊"关系。
2025-12-08 21:16:00
1475
原创 解码常对象与运算符重载
本文介绍了C++中常对象与常对象成员的概念及应用。常对象通过const修饰,其数据成员具有只读属性,必须初始化且只能调用const成员函数。常对象成员分为常数据成员(需通过构造函数初始化列表初始化)和常成员函数(承诺不修改对象数据)。此外,文章还概述了运算符重载的基本概念,强调其本质是特殊函数重载,需遵循优先级、操作数等限制规则。示例代码演示了常对象、常成员及运算符重载的实际应用,帮助理解这些核心机制在C++中的实现方式。
2025-12-07 20:31:28
829
原创 解码类进阶核心——静态成员、this 指针、动态内存与友元机制
本文介绍了C++中静态成员、this指针、对象指针和友元机制的核心概念。静态成员属于类本身,包括静态数据成员(所有对象共享)和静态成员函数(无this指针);this指针是成员函数的隐含参数,用于解决命名冲突和链式调用;对象指针通过new/delete管理堆内存,与malloc/free相比更安全;友元机制允许外部访问私有成员,包括友元函数和友元类。这些特性增强了C++的封装性和灵活性,但需谨慎使用以避免破坏封装原则。
2025-12-05 20:56:24
639
原创 解码ARM 开发板 OpenSSL+cURL 交叉编译与 HTTPS 配置
本文详细介绍了在Linux环境下交叉编译OpenSSL和cURL库并部署到ARM开发板的全过程。主要内容包括:环境准备(工具链配置)、OpenSSL 1.1.1w的交叉编译(参数配置、编译安装)、cURL 8.7.1的交叉编译(关联OpenSSL)、以及最终在ARM开发板上的部署步骤(文件传输、环境变量配置、库文件链接等)。文章提供了完整的命令行操作流程,并对关键参数进行了说明,帮助开发者成功在ARM架构设备上构建支持HTTPS的cURL工具链。
2025-12-04 22:14:38
920
原创 解码构造与析构
本文系统介绍了C++中构造函数与析构函数的核心概念和使用方法。构造函数用于对象初始化,包括无参构造、有参构造和拷贝构造,重点剖析了拷贝构造的深浅拷贝问题及解决方案。析构函数负责对象销毁时的资源清理,强调其不可重载的特性。文章通过代码示例和生活类比,详细讲解了构造/析构函数的语法规则、调用时机及注意事项,特别指出动态内存管理时必须实现深拷贝以避免资源冲突。最后总结了禁用拷贝构造的场景和性能优化建议,为C++对象生命周期管理提供了完整指导。
2025-12-03 22:09:12
1303
原创 解码面向对象编程与内联函数
本文介绍了面向对象编程(OOP)的核心概念及其与面向过程编程(POP)的区别。OOP通过抽象、封装、继承和多态四大特性,将问题分解为对象交互,而POP则关注步骤流程。文章详细阐述了类与对象的关系:类是抽象模板,对象是具体实例,实例化是创建对象的过程。重点讲解了封装的重要性,通过访问权限控制实现信息隐藏,并强调属性私有化和接口分离的设计原则。最后,解释了对象内存分配机制,包括成员属性的字节对齐和成员函数的共享特性,帮助读者理解OOP的基本原理和实践方法。
2025-12-02 18:35:52
1138
原创 解码C++基础——从C到C++
本文介绍了C++编程语言的核心概念,包括其多范式特性(过程化、面向对象和泛型编程)、基础程序结构以及关键语法元素。重点讲解了名字空间(Namespace)机制,详细说明其定义、访问方式(使用作用域解析符::或using语句)、嵌套结构以及解决命名冲突的实际应用。此外,文章对比了C++的输入输出流(cin/cout)与C语言的scanf/printf,强调其类型安全和扩展性优势,并介绍了C++特有的string类及其自动内存管理等特性。这些内容为C++初学者提供了语言基础知识的系统概览。
2025-12-01 20:43:59
1811
原创 tips:LVGL 定时器触发周期不准确(实际间隔 > 设定间隔)问题排查与解决方案
摘要: 在使用LVGL开发嵌入式GUI时,发现设定的1秒定时器实际执行间隔明显超时。分析表明,LVGL定时器基于手动递增的"节拍"计数器工作,其精度完全依赖lv_tick_inc(x)的调用频率和参数准确性。原代码通过固定5ms休眠和固定5ms增量导致时间累计误差。提出两种解决方案:推荐方案一采用精确时间测量(使用gettimeofday()动态计算真实耗时),确保定时器精准触发;方案二通过匹配1ms循环周期实现简单但精度较低。对比显示方案一在精度、健壮性方面优势明显,是标准实践方法。
2025-11-27 20:51:22
847
原创 解码JSON
JSON是一种轻量级数据交换格式,采用键值对和数组两种基本结构,支持字符串、数值、布尔值等数据类型。cJSON是C语言的JSON解析库,通过cJSON_Parse解析字符串为树形结构,使用cJSON_GetObjectItem获取对象值,cJSON_GetArrayItem访问数组元素,最后需调用cJSON_Delete释放内存。示例展示了如何解析天气API返回的JSON数据,提取城市天气信息。该库简洁高效,适合嵌入式开发等场景。
2025-11-26 21:38:34
1116
原创 解码HTTP
HTTP协议是应用层请求-响应协议,用于客户端与服务器通信。它基于TCP连接,支持文本、图片等多种资源传输。HTTP报文由请求行、首部字段、空行和包体组成,支持GET、POST等方法。HTTP/1.1采用持久连接提高效率。响应报文包含状态码(如200成功、404未找到)。实际应用中,通过构造HTTP请求调用API接口获取数据。
2025-11-25 21:39:20
1465
原创 解码服务器IO模型
服务器IO模型是处理多客户端请求的核心方案,主要分为非阻塞轮询和多任务并发两种模型。UDP服务器采用单一套接字处理所有客户端,而TCP服务器为每个连接创建独立套接字。非阻塞轮询通过fcntl()设置套接字非阻塞属性,避免阻塞并持续轮询检查数据,但会占用较多CPU资源。多任务模型则使用多线程,TCP服务器中主线程监听连接,为每个客户端创建子线程处理通信,通过互斥锁保护共享资源。两种模型各有优劣,需根据具体场景选择,非阻塞模型适合轻量级需求,多线程模型则能更好地支持高并发TCP连接。
2025-11-24 20:46:30
1452
原创 解码TCP
TCP是传输层的核心协议,提供面向连接的可靠数据传输。其核心特性包括三次握手建立连接、四次挥手断开连接,以及通过序列号、确认应答、校验和、超时重传等机制保障可靠性。TCP报头包含源/目标端口号、序列号、控制位等关键字段,最小20字节。采用C/S架构,通过socket、connect等系统调用实现通信。TCP确保数据无丢失、无重复、按序到达,并支持流量控制和全双工通信,是互联网数据传输的基础协议。
2025-11-23 17:43:49
1190
原创 解码UDP
摘要: UDP协议是传输层核心协议,提供无连接、不可靠的数据传输服务。其特点包括无需建立连接、不保证数据交付与顺序、报首仅8字节轻量高效,适合实时性要求高且容忍丢包的场景。UDP数据报最大长度为65507字节,但建议≤1472字节以避免IP分片。编程接口涉及socket()创建套接字、bind()绑定地址端口、sendto()发送数据,需注意字节序转换及错误处理。UDP适用于DNS、视频流等低延迟应用,但需应用层自行处理可靠性问题。
2025-11-22 20:45:08
1031
原创 解码网络编程基础
本文系统讲解了进程间通信(IPC)和网络通信的核心概念。主要内容包括:1) 进程间通信方式如管道、信号等仅适用于同主机,跨主机通信需通过Socket套接字实现;2) IP地址作为主机唯一标识,分为IPv4和IPv6两类,介绍了IP分类、特殊地址及子网掩码的作用;3) 网络通信采用TCP/IP四层模型,包括物理层(传输介质)、数据链路层(帧传输)等核心内容。文中通过代码示例和图表详细说明了Socket创建、IP地址计算等关键实现方法,为理解网络通信原理提供了系统指导。
2025-11-21 22:10:32
1342
原创 解码线程池
摘要: 线程池通过预先创建并复用线程,减少频繁创建/销毁的开销,提升并发效率。其核心机制包括:1)任务队列管理待执行任务(函数+参数);2)线程池结构体统一管理线程生命周期;3)同步机制(互斥锁+条件变量)保证线程安全;4)动态调整线程数量。关键实现要点:线程循环执行任务时需处理同步、虚假唤醒和资源释放问题。线程池将任务执行与线程管理分离,开发者只需关注任务逻辑,无需处理底层线程调度。
2025-11-20 18:39:03
1197
原创 解码线程调度与信号响应
本文介绍了Linux线程调度策略的核心概念与实现方法。主要内容包括:线程作为最小调度单位,采用抢占式调度机制,高优先级线程可抢占低优先级线程;优先级分为静态优先级(0-99,系统任务可抢占)和动态优先级(通过nice值调整);三种调度策略(SCHED_OTHER默认分时调度、SCHED_FIFO实时先到先服务、SCHED_RR实时轮询)的特性与使用场景;以及相关API函数的使用示例,如设置线程属性、调度策略和优先级等。文章通过代码演示了如何创建SCHED_FIFO策略的高优先级线程。
2025-11-19 21:26:23
948
原创 解码死锁的产生与解决
死锁是多线程编程中的常见问题,指多个线程因互相等待对方资源而陷入无限阻塞状态。其产生需同时满足四个必要条件:资源互斥、请求且保持、不可剥夺和循环等待。预防死锁的主要策略包括破坏这些条件,如一次性申请所有资源(破坏请求且保持)、资源抢占(破坏不可剥夺)和资源有序分配(破坏循环等待)。此外,还可通过运行时动态检测和事后处理解决死锁。实际编程中,统一加锁顺序是最常用的预防方法。代码示例展示了因加锁顺序不一致导致的死锁及其修正方案。
2025-11-18 18:20:51
1265
原创 解码线程同步与互斥
线程并发执行时会出现资源争抢问题,需通过同步和互斥机制解决。互斥锁是实现互斥的核心机制,包括初始化、上锁(阻塞/非阻塞/带超时)、解锁和销毁等操作。关键函数如pthread_mutex_init()、pthread_mutex_lock()和pthread_mutex_unlock(),使用时需注意:避免重复加锁造成死锁,确保释放已获取的锁,并通过临界区保护共享资源。示例展示了主线程和子线程如何通过互斥锁安全访问全局变量,以及带超时的锁获取方法,防止线程永久阻塞。
2025-11-17 17:44:08
1109
原创 解码线程编程
本文介绍了线程的基本概念及其在Linux系统中的创建方法。线程作为进程内执行单元,共享进程资源但拥有独立执行流。文章通过触摸屏坐标获取实例,演示了pthread_create()函数的使用:主线程打开设备文件,创建子线程持续读取触摸事件并转换坐标。关键点包括线程函数原型、参数传递注意事项、资源同步机制(全局变量)以及错误处理。代码展示了如何实现硬件坐标到屏幕坐标的转换,并强调线程安全性和边界检查的重要性。最后指出编译时需链接pthread库(-lpthread),为后续线程管理技术奠定基础。
2025-11-16 20:31:34
818
原创 解码IPC-消息队列、共享内存与信号量集
System-V IPC 是 Linux 进程间通信标准,含消息队列、共享内存、信号量集三类持久性资源,通过键值(key)标识,需手动创建 / 删除。共性:依赖 ftok () 生成唯一键值,可通过 ipcs/ipcmk/ipcrm 命令管理,资源常驻内存需手动清理。特性:消息队列按类型传数据,自带阻塞;共享内存效率最高,需信号量互斥;信号量集负责进程同步,靠 P/V 原子操作。适用场景:按类型传数据用消息队列,高效共享数据用共享内存 + 信号量,协调临界资源访问用信号量集。
2025-11-15 18:49:07
1077
原创 解码IPC-管道与信号
摘要: 进程间通信(IPC)是进程间数据交换的重要方式,本文重点解析管道和信号两种基础通信机制。管道分为匿名管道和命名管道:匿名管道通过pipe()创建,适用于亲缘进程通信,数据单向流动且读写端需明确分工;命名管道通过mkfifo()创建文件节点,支持无亲缘关系进程通过文件路径访问,具备多路写入能力。两者均遵循先进先出规则,但命名管道突破了亲缘限制,扩展了应用场景。文章通过代码示例演示了父子进程匿名管道通信及跨进程命名管道的实现方法,并分析了缓冲区大小测试等关键技术细节。
2025-11-14 20:17:12
1020
原创 解码程序与进程
本文梳理了程序与进程的核心概念及编译执行过程。程序是静态指令集合,进程是其动态执行实例。程序需经过预处理、编译、汇编、链接四阶段生成ELF格式可执行文件。进程由PCB、代码段和数据段组成,具有五种基本状态并相互转换。Linux通过fork()创建进程,构建进程树结构,由systemd作为根进程管理所有进程。文中详细介绍了GCC编译流程、ELF文件结构、进程特征与状态转换等关键知识,并提供了相关工具命令和系统调用接口。
2025-11-13 19:32:21
918
原创 解码LVGL 布局与多界面编程
LVGL 提供了弹性布局(Flex)和网格布局(Grid)两种灵活的布局方式。Flex 布局支持单向排列(行/列),可通过弹性增长分配剩余空间,提供多种对齐方式和自动换行功能。Grid 布局是二维表格结构,支持定义固定/自适应/比例分配的轨道大小,元素可跨多行多列。两种布局都支持间隙控制,Flex 适配 RTL 布局,Grid 需要手动配置每个子元素的位置。开发者可根据需求选择合适布局,通过样式属性统一管理布局参数。两种布局均需在 lv_conf.h 中启用对应宏后使用。
2025-11-12 18:28:18
853
原创 解码LVGL定时器
LVGL定时器机制提供周期性执行回调函数的功能,基于非抢占式调度,需定期调用lv_timer_handler()触发。核心接口包括创建定时器(可指定周期、回调和用户数据)、就绪/重置定时器、修改参数(回调、周期、用户数据)以及设置执行次数。定时器支持暂停/恢复功能,可获取调度空闲百分比,并提供异步调用机制。使用时需注意控制回调耗时,避免影响其他定时器触发,在操作系统中可结合返回值优化线程调度。
2025-11-11 18:19:05
754
原创 解码LVGL中文字体、输入框、键盘
中文显示方案摘要 LVGL提供两种中文显示方案:1)固定汉字方案:通过在线字体生成器提取特定汉字生成C数组字库,适用于按钮等固定文本场景;2)动态加载方案:集成FreeType库实时解析TTF字体文件,支持任意汉字显示,适用于用户输入等动态文本场景。关键步骤包括字体文件准备、LVGL配置修改(启用FreeType)、项目编译配置(添加头文件路径及库链接)。方案1节省内存但灵活性有限,方案2功能全面但对系统资源要求较高。根据具体应用场景选择合适方案即可实现LVGL中文显示功能。
2025-11-10 10:55:37
1893
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅