- 博客(95)
- 资源 (1)
- 收藏
- 关注
原创 串口通信——组装成一个字节序列(`QByteArray`)
这段代码通过位运算和类型转换将16位整数拆解为字节序列,符合Modbus协议的二进制传输要求。主要使用>>8提取高8位,&0xFF获取低8位,配合(char)强制转换为单字节数据。核心流程包括:1)拆分起始地址;2)计算寄存器数量及数据长度;3)遍历values数组逐个拆解16位数值;4)添加CRC校验码(低字节在前)。整个过程实现了从多字节整数到二进制字节流的转换,构建出完整的Modbus通信帧。
2025-11-24 10:16:26
3
原创 串口通信——Modbus CRC16 校验
本文解析了Modbus通信协议中的CRC16校验机制。通过两个典型指令示例(读取指令01 04 01 90 00 14和写入指令01 10 00 C9 00 01 02 05 A0),详细说明了CRC16校验的计算过程,包括初始化、逐字节处理、移位异或等步骤。重点强调了校验码的字节顺序(低字节在前)和计算范围(从地址到数据字段)。同时提供了编程实现示例和常用校验工具推荐,帮助开发者正确实现Modbus通信的数据校验功能。
2025-11-24 09:53:10
1
原创 串口通信——解析命令
摘要: 本文解析了Modbus通信协议中功能码0x04(获取寄存器值)和0x10(设置参数)的指令格式及交互过程。 0x04功能码:主站请求获取从站地址1的400~419号寄存器(20个)的值,从站返回40字节数据(20个寄存器的值)及CRC校验。 0x10功能码:主站设置从站地址1的201号寄存器值为14.4V(0x05A0),从站回复确认操作。 关键字段:包括从站地址、功能码、寄存器地址/数量、数据字节、CRC校验等,均通过十六进制与十进制转换详细说明。CRC校验确保数据传输准确性。
2025-11-24 09:38:26
2
原创 整数转大端序字节数组
本文详细介绍了Qt中的QByteArray类及其字节与位序处理。主要内容包括:QByteArray的基础使用方法,字节序(大端序和小端序)的概念区别,以及如何在QByteArray中手动处理字节序转换。文章还提供了将32位整数转换为大端序字节数组的代码示例,并强调了在数据处理时进行边界检查的重要性,对于网络协议和硬件通信开发具有实用参考价值。
2025-11-19 11:36:49
150
原创 将qt界面中加载css或者qss样式
本文介绍了Qt样式表(QSS)的基本使用方法,重点展示了如何为Qt控件(如QPushButton)设置样式。内容包括:1)基本样式属性设置(边距、边框、内边距);2)控件不同状态(启用/禁用、焦点、悬停、按下)的样式控制;3)特殊效果处理(选中状态、窗口激活状态);4)高级功能(图标设置、子控件定位、边框图像)。QSS提供了一种类似CSS的方式来批量定制Qt界面控件的外观和交互效果,相比逐个控件设置属性更加高效统一。文章通过代码示例演示了QSS的语法特点和常用属性配置方法。
2025-11-13 10:23:01
230
原创 Qt 内存管理---创建对象
本文介绍了Qt中对话框的内存管理方法,对比了new创建和栈对象两种方式的区别及适用场景。详细分析了内存位置、全局与局部对象的选择策略,并提供了实际应用建议:简单对话框推荐使用栈对象,复杂或需重复使用的对话框建议使用堆对象并设置自动删除属性。最佳实践包括设置父对象、使用WA_DeleteOnClose属性和优先使用栈对象等,帮助开发者根据需求选择合适的内存管理方式,确保内存安全。
2025-11-12 09:33:18
150
原创 Qt5 问题集锦
Windows环境下, Qt Creator, 菜单->工具->选项->文本编辑器->行为->文件编码->默认编码, 推荐utf-8 ,使用“如果编码是UTF-8则添加bom”②QMAKE_CXXFLAGS += /utf-8 到pro文件中。取消勾选shadow build—构建(清除、重新构建项目)调试失败、qDebug无法打印,开两个creator导致的。如果新拖拽的控件,运行不显示怎么办?①qt设置“UTF-8+BOM”
2025-11-12 09:14:22
146
原创 Qt 中模态对话框的核心方法---exec()
exec()是Qt中实现模态对话框的核心方法,主要有以下特点:1)阻塞当前执行,等待对话框关闭;2)返回用户操作结果(Accepted/Rejected);3)启动局部事件循环。适用于需要强制用户响应或获取选择结果的场景,如登录验证、确认对话框等。与非模态的show()不同,exec()会暂停后续代码执行。使用时需注意内存管理和避免嵌套调用,Qt5后推荐使用open()作为替代方案。该方法确保程序在关键决策点等待用户明确选择。
2025-11-12 09:06:55
215
原创 Qt 框架---Q_PROPERTY宏的使用
Q_PROPERTY是 Qt 框架中的一个重要宏,用于在 QObject 派生类中声明属性,使得这些属性可以在 QML 中直接访问和修改。
2025-11-03 16:08:14
305
原创 在Qt6中,QML如何引入ColorDialog?
本文介绍了Qt6中ColorDialog的使用方法变化。推荐使用Qt.labs.platform模块,示例代码展示了如何在QML中创建文件对话框和颜色对话框。同时提供了在CMake项目中添加Qt6 Widgets模块的方法,包括find_package命令和target_link_libraries设置。这些改动反映了Qt6对模块化架构的优化,使对话框组件的使用更加规范和灵活。
2025-11-02 09:08:25
165
原创 OpenCV Vec3b类型用法
/ 3个uchar类型的数组Vec3bOpenCV 中表示彩色像素的标准方式一个包含3个uchar(0-255)的结构按BGR 顺序存储(OpenCV的默认顺序)用于Mat::at<>模板方法中访问彩色图像像素理解Vec3b对于在 OpenCV 中进行像素级操作至关重要!
2025-10-26 21:13:44
453
原创 C++面向对象世界探索
本文介绍了一个基于C++面向对象编程的学生信息管理系统。系统采用封装、继承和多态等OOP核心概念,通过Person基类和Student派生类展示类层次设计。项目特别使用explicit关键字防止隐式转换,增强类型安全性,并采用智能指针管理对象生命周期。系统包含完整的构造/析构机制,演示了堆栈对象的创建与销毁过程。代码结构清晰,包含头文件、实现文件和主程序,可通过g++编译运行。项目还探讨了继承的使用场景、explicit关键字的意义和对象生命周期管理等技术要点,为学习C++面向对象编程提供了实用案例。
2025-08-15 14:05:52
668
原创 将本地项目提交到GitCode仓库的步骤
本文介绍了Git代码仓库的基本操作流程:1)初始化本地仓库并提交初始版本;2)连接远程仓库并进行首次代码推送;3)常规开发工作流程;4)处理分支差异问题;5)使用.gitignore文件排除不需要版本控制的目录和文件。重点说明了如何正确配置.gitignore文件,以及当误提交文件后如何从版本控制中移除的操作方法。文章提供了从项目初始化到日常开发的完整Git操作指南,适合开发者快速掌握Git基础工作流程。
2025-08-15 10:47:21
273
原创 WinForm 中 Lambda 表达式的原理及应用
本文详细介绍了Lambda表达式在WinForm开发中的核心原理和应用场景。Lambda作为匿名函数的简洁表示法,其编译后会生成委托或表达式树。文章从LINQ查询、事件处理、集合操作和跨线程调用等典型应用入手,剖析了底层机制,包括延迟执行、委托实例化和线程同步等原理。特别强调了闭包陷阱、内存管理和性能优化等注意事项,并提供了动态控件生成、数据绑定等高级应用示例。最后给出调试技巧和优化建议,指出合理使用Lambda可提升开发效率,但需注意内存影响和性能开销。文章全面解析了WinForm中Lambda的工作机制
2025-06-05 14:20:06
878
原创 编程笔记---问题小计
这是因为ProgressBar的value属性期望的是一个0到1之间的值,而model.progress的值通常是0到100之间的整数或浮点数。当使用model.progress / 100来设置value时,这样做的原因是为了将模型中的进度值转换为0到1的范围。这段代码创建了一个ProgressBar,其value属性设置为model.progress / 100,这意味着进度条的当前值将根据model.progress的值动态更新,并将其映射到0到1的范围内。
2025-06-05 10:06:03
350
原创 QML contentItem.height 和 implicitHeight 两种不同的高度属性
摘要 在 QML 中,implicitHeight 和 contentItem.height 分别用于不同场景的高度控制。implicitHeight 是组件根据内容自动计算的理想高度,适用于自适应布局(如 Column),但会被显式 height 覆盖。contentItem.height 则专用于 Control 派生类(如 ScrollView),表示内部容器的实际高度,影响滚动行为。两者的关键区别在于适用对象(通用 vs. 控件专用)和布局影响(建议 vs. 内部实际尺寸)。常见问题包括滚动失效或动
2025-06-05 09:51:25
479
原创 Vim 中设置插入模式下输入中文
本文介绍了在Vim中配置中文输入的方法。首先需要安装系统输入法(推荐IBus或Fcitx框架),然后通过fcitx.vim插件实现输入法自动切换。同时提供了手动切换方案和优化中文输入的Vim配置建议,包括编码设置和常见问题解决。最后通过步骤总结帮助用户快速完成配置,实现在Vim插入模式下流畅输入中文。
2025-05-28 23:28:14
1214
原创 Linux C++ 开发基础命令指南
本文介绍了Linux环境下C++开发的基础工具链配置与使用指南。内容包括:1) GCC/G++编译器安装、版本管理和升级方法;2) C++标准库文档安装;3) Vim编辑器的基本使用和C++编程配置技巧;4) C++代码编译运行命令及常用选项;5) 实用开发技巧如调试、Makefile编写等。通过这些基础工具的掌握,开发者可以在Linux平台上高效进行C++开发工作,为后续使用更高级的开发工具奠定基础。
2025-05-28 22:55:55
444
原创 常用 Linux 命令---服务器开发和运维相关命令
本文总结了Linux服务器开发和运维中的常用命令,涵盖文件操作、系统监控、网络管理、性能分析等核心功能。文件操作包括ls、cd、rm等基础命令;系统监控涉及top、ps等进程管理工具;网络相关命令如ping、curl用于调试;性能分析工具包含vmstat、strace等;权限管理使用chmod、sudo等命令。还介绍了开发相关的gcc、gdb,以及文本处理工具grep、awk等实用技巧。这些命令组合使用可高效完成服务器管理和开发任务。
2025-05-28 22:47:43
938
原创 QML Loader 和 createObject() 动态创建组件实例
在 QML 中,Loader和都可以用于动态创建组件实例,但它们的适用场景和工作机制有显著区别。
2025-05-09 09:17:24
519
1
原创 QML Component+Loader+Binding 动态刷新数据
在 QML 中,ComponentLoader和Binding是三个关键元素,它们共同用于实现和。
2025-05-09 09:13:59
853
原创 QML 动态加载组件
在 QML 中, 和 是两个非常重要的元素,它们通常一起使用来实现动态加载和组件复用。下面我将详细解释它们的用法和区别: 是一个可以重复使用的 QML 元素定义,它本身不会直接创建实例,而是作为模板使用。使用方式与 Loader 一起使用:作为委托组件:内联定义:特点不会立即实例化可以包含任意 QML 元素可以有自己的逻辑和属性2. Loader(加载器)基本概念 用于动态加载和实例化 QML 组件。关键属性属性说明要加载的 QML 文
2025-05-07 14:01:15
930
原创 QML ProgressBar控件详解
是一个常用的进度条控件,用于显示任务的完成进度。以下是 ProgressBar。,包括基本用法、自定义样式、动态绑定数据等。如果数据来自 C++(如。
2025-05-06 13:47:37
520
原创 c++ 二级指针 vs 指针引用
特性二级指针指针引用语法复杂度高(需要&和*操作)低(直接使用)可读性较低较高空值安全性需要检查nullptr不能绑定到nullptr重新绑定可以修改指向的指针不能重新绑定C兼容性兼容C仅C++模板元编程适用性更灵活有时受限编译器优化可能多一层间接寻址可能更易优化指针引用更简洁的语法更好的类型安全性更清晰的代码表达力二级指针与C的兼容性处理nullptr的能力更底层的控制在实际开发中,纯C++项目应优先使用指针引用,而在需要与C交互或特殊情况下使用二级指针。
2025-05-03 19:07:23
552
原创 c++ 指针参数传递的深层原理
指针参数传递的是指针值的拷贝(地址值的副本)通过副本指针可以修改原始数据(因为地址相同)修改副本指针本身(改变它存储的地址)不影响原始指针要修改指针本身需要传递指针的指针或指针的引用这是C/C++函数参数"值传递"特性的直接结果理解这一机制对于正确使用指针和避免内存错误至关重要。
2025-05-03 18:53:05
482
原创 在c++中,char定义的变量取地址时,为什么会输出 “烫烫烫...“?
后面的内存内容是未初始化的(可能是垃圾值),所以会输出乱码(如 “烫烫烫…有特殊处理,会把它当作字符串的起始地址,并尝试打印直到。结尾的字符数组),而不是内存地址。只是一个字节,后面的内存可能是随机数据,导致乱码。就不会把它当作字符串,而是直接输出指针的地址值。这样可以避免乱码,正确显示变量的内存地址。,而不是把它当作字符串,你需要将。的地址开始读取内存,直到遇到。在 C++ 中,当你直接输出。
2025-05-03 10:51:51
360
原创 C# 的 字符串插值($) 和 逐字字符串(@) 功能
功能,并在 SQL 语句中动态拼接变量。这样既保持了 SQL 语句的可读性,又能动态插入变量。符号,允许在字符串中直接嵌入表达式(用。这样可以有效防止 SQL 注入攻击。,用于动态生成 SQL 语句中的。虽然这种拼接方式方便,但存在。这段代码使用了 C# 的。用于动态插入变量值,如。在 SQL 语句中,
2025-04-21 15:48:46
917
原创 C# 运算符:?.(null 条件运算符)和 ??(null 合并运算符)
获取 comboBox1 当前选中的值,如果这个值为 null 或者获取过程出现问题,就返回空字符串而不是 null”。这种写法是一种防御性编程技巧,可以避免在后续代码中使用这个字符串时出现 NullReferenceException。(null 合并运算符)。(null 条件运算符)和。在 WinForms 中,
2025-04-21 15:31:54
349
原创 类、面向对象、UML类图
聚合关系(整体和部分的关系,整体析构了不会影响部分,空心菱形线)、组合关系(包含关系,整体析构会带着部分析构,实心菱形直线)、依赖关系(一个类作为另一个的参数,带箭头的虚线)【类和类之间的关系】继承关系(也叫泛化关系,空心三角的直线)、关联关系(一个类作为另一个类的成员变量,箭头线)、处理面向对象需要步骤:需要摘出来其中的对象,对象包含的属性、以及行为,创建这个类,类的实例就是对象。【类】 封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2025-04-07 17:44:07
265
原创 在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
特性Qt 版本兼容性兼容 Qt 5 和 6仅 Qt 6QML 模块使用使用原生Qt Widgets 支持默认启用不包含资源系统传统qrc文件支持 CMake 资源管理适用场景迁移项目/混合界面全新纯 QML 项目。
2025-03-30 18:03:47
841
原创 CMake 生成静态库、动态库
使用生成静态库(STATIC)或动态库(SHARED通过和设置库的输出目录。使用链接库文件到可执行文件。动态库可以设置版本号和导出符号(特别是在 Windows 下)。
2025-03-16 18:01:40
1205
原创 CMake 保姆级教程
CMake 是一个跨平台的构建工具,用于生成适合不同平台和编译器的构建系统文件(如 Makefile 或 Visual Studio 项目文件)。在 Windows 下使用CMake构建项目时,CMake 会根据文件生成适合 Windows 的构建系统文件(如 Visual Studio 项目文件)。
2025-03-16 12:12:00
2202
原创 Linux基础---切换用户、创建用户、删除用户、添加和删除用户组、修改密码
Linux 是一个多用户的操作系统, 可以同时登录多个用户,因此需要在多个用户之间切换时,用户切换需要使用su或者su -。使用su 之切换用户;使用su -,不仅会切换用户也会切换工作目录。从用户A切换到用户B,如果还想再切换回用户A,可以直接使用exit。
2025-03-08 14:52:08
154
原创 Linux 基础---重定向命令(>、>>)、echo
关于重定向使用的最多就是输出重定向:修改输出数据的位置,通过重定向操作可以非常方便的进行文件的复制,或者文件内容的追加。
2025-03-08 14:29:22
371
原创 Linux下安装VS Code
在 CentOS 7 上安装 Visual Studio Code (VS Code) 时,你遇到的错误是因为 CentOS 7 的 glibc 版本较低,而 VS Code 的某些版本需要更高版本的 glibc(如 GLIBC_2.28),这是 CentOS 8 或更高版本才提供的。使用 Snap 安装 VS Code。适用于snap安装的vs。
2025-03-03 22:53:02
430
原创 Linux 基础---sudo权限 修改文件所属人、用户所属组
概念:让普通用户使用管理员权限执行一些操作(root)在命令前加上sudo 即可。
2025-03-03 21:52:07
265
原创 Linux 基础---文件权限
文件权限是针对文件所有者、文件所属组、其他人这三类人而言的,对应的操作是chmod。设置方式:文字设定法、数字设定法。
2025-03-03 21:42:53
281
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅