自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 收藏
  • 关注

原创 windows系统中双击.py文件可以直接运行

本文介绍了Windows系统中运行.py文件的四种方法:1)通过命令行导航到目录执行python命令;2)设置默认打开方式直接双击运行;3)创建批处理文件自动运行;4)使用IDE编写和运行代码。每种方法都提供了具体操作步骤,如命令行使用cd命令导航、添加input防闪退、批处理文件编写等。用户可根据需求选择最适合的运行方式,从简单双击到专业开发环境均可灵活选用。

2025-07-14 19:57:05 157

原创 【视频格式转换】.264格式转为mp4格式

本文介绍了三种将H.264(.264)视频转换为MP4格式的Python实现方法。第一种是批量转换当前目录下所有.264文件;第二种支持文件拖拽操作;第三种提供GUI文件选择窗口并自动打开输出目录。所有方法均基于FFmpeg工具,采用视频流直接封装方式(不重新编码)以保持质量。脚本需提前安装FFmpeg并配置环境变量,支持Windows、macOS和Linux系统。转换过程保留原视频参数,输出同名MP4文件,适用于需要快速转换视频容器格式的场景。

2025-07-14 19:49:16 725

原创 【git学习】第2课:查看历史与版本回退

本文介绍了Git版本管理的核心操作:查看历史记录、差异对比和版本回退。主要内容包括:1)使用gitlog查看提交历史及各种简写参数;2)通过gitdiff对比工作区、暂存区和历史版本差异;3)三种版本回退方法(checkout临时查看、reset彻底回退、revert安全撤销)及其适用场景;4)操作示例和误删文件恢复方法。重点强调hard模式reset的危险性和revert的安全优势,最后提供实践练习任务。全文涵盖Git版本控制的关键技能点,帮助开发者掌握历史追踪和版本回退的核心操作。

2025-07-04 11:35:22 272

原创 【git学习】第 1 课:Git 是什么 & 本地仓库入门

《Git入门基础教程》,本节课程讲解了Git版本控制系统的核心概念和基础操作:1) Git作为分布式版本控制工具,可记录代码历史、支持多人协作;2) 演示Windows环境下的Git安装及初始配置(用户名/邮箱);3) 详细说明本地仓库创建流程:通过git init初始化、add/commit两步提交机制;4) 介绍.gitignore文件的用途与配置方法。课程包含实操演示新建仓库、文件提交和查看日志等基础命令,并布置了创建多文件提交的实践作业。通过本课学习,学习者将掌握Git本地仓库管理的

2025-06-29 00:15:00 721

原创 【CMake基础入门教程】第八课:构建并导出可复用的 CMake 库(支持 find_package() 查找)

本文详细介绍了如何构建并导出可复用的CMake库,使其支持find_package()查找。主要内容包括:1)通过install()安装目标、头文件和导出配置;2)编写MyMathLibConfig.cmake.in配置文件和版本文件;3)标准化安装目录结构;4)其他项目通过find_package()使用该库的方法。该方案可将自制库升级为类似Qt/Boost等第三方库的复用方式,实现跨项目共享。

2025-06-28 00:15:00 349

原创 【git学习】学习目标及课程安排

Git入门学习指南,本学习计划系统讲解Git版本控制工具,涵盖基础到进阶内容。课程安排:①Git基础与本地仓库操作 ②版本回退技巧 ③分支管理与合并 ④rebase/stash等高级用法 ⑤远程仓库协作 ⑥团队开发流程 ⑦实战问题排查。推荐配合ProGit书籍、LearnGitBranching交互工具学习,建议每周整理笔记并参与开源项目实践。学习重点包括:提交规范、冲突解决、PR流程等团队协作必备技能,帮助开发者掌握高效代码管理能力。

2025-06-28 00:15:00 821 1

原创 【CMake基础入门教程】第六课:构建静态库 / 动态库 与安装规则(install)

本文摘要:CMake第六课讲解如何构建静态库(.lib/.a)和动态库(.dll/.so),重点内容包括:1)使用add_library()创建两种库类型;2)Windows动态库需添加导出宏;3)install()安装规则实现头文件和库文件的标准化部署;4)主程序通过include_directories和link_directories使用已安装库。教程提供了完整项目示例,涵盖双库构建、安装配置和调用流程,为模块化开发和代码复用提供完整解决方案。

2025-06-27 00:15:00 1140

原创 【CMake基础入门教程】第七课:查找并使用第三方库(以 find_package() 为核心)

摘要:本课讲解CMake中find_package()的使用方法,通过Config/Module两种模式查找第三方库(如OpenCV/Qt/Boost)。主要内容包括:1)find_package基本语法和REQUIRED参数;2)Config模式(查找XXXConfig.cmake)与Module模式(FindXXX.cmake)的区别;3)OpenCV、Boost、Qt的具体配置示例;4)现代CMake的推荐写法(LibX::LibX);5)解决库查找失败的技巧(设置XXX_DIR或CMAKE_PREF

2025-06-27 00:15:00 434

原创 【CMake基础入门教程】第五课:拆分模块与使用 add_subdirectory() 构建子目录项目

摘要:本课讲解CMake项目模块化管理,重点介绍如何拆分模块并使用add_subdirectory()构建子目录项目。通过将math模块拆分为独立子目录,演示了主项目与子模块的配置方法:主CMakeLists.txt使用add_subdirectory()引入子模块,子模块通过add_library()创建库,并用target_include_directories()设置头文件路径,最后用target_link_libraries()链接主程序与子模块。这种模块化方式可实现独立编译、多人协作和解耦开发

2025-06-26 09:07:02 313

原创 【CMake基础入门教程】第四课:项目结构与多个源文件、头文件管理

本文摘要: 第四课讲解CMake项目结构与多文件管理,重点包括: 项目拆分方法,演示添加.cpp和.h文件 使用target_include_directories()设置头文件路径 模块化开发基础(为后续库构建做准备) 示例项目包含main.cpp、math/add.h和math/add.cpp 强调两种路径写法差异: 相对路径(math)易出错,推荐使用绝对路径(${CMAKE_CURRENT_SOURCE_DIR}/math) 提供实践建议:统一使用绝对路径确保稳定性,并介绍了常用CMake路径变量

2025-06-26 09:05:04 1072

原创 【CMake入门学习教程】bash语句示例注解

本文详细解析了CMake构建过程中的常用命令行操作,适合初学者快速掌握基础命令。文章分五部分讲解了关键命令:1)创建构建目录(mkdir build);2)切换工作目录(cd build);3)CMake项目配置与生成(-G参数指定生成器);4)工程编译方法(区分VS和Makefile系统);5)MinGW工具链的特别用法。最后提供了命令对照总结表,清晰展示各命令功能及适用场景,并承诺后续课程将延续这种详细注解的教学方式。

2025-06-25 19:01:41 397

原创 【CMake基础入门教程】第三课:构建系统与构建类型详解

《CMake构建系统与构建类型详解》摘要(149字) 本文系统讲解CMake构建流程与配置方法:1)推荐使用独立build目录保持源码整洁,支持多配置共存;2)CMake采用配置(生成构建系统)和构建(实际编译)两阶段流程;3)详解Debug(含调试信息)与Release(开启优化)模式的区别及指定方法,单配置生成器用CMAKE_BUILD_TYPE变量,多配置生成器需--config参数;4)介绍不同生成器(Visual Studio/Makefile/Ninja)的选择与使用。

2025-06-25 10:09:19 335

原创 【CMake基础入门教程】第二课:CMakeLists.txt 的基本语法与结构

本文将介绍CMakeLists.txt文件的基本语法与结构。CMakeLists.txt是CMake的配置脚本,用于定义项目名称、最低版本要求、源文件编译和生成目标类型。一个基本示例包含:指定CMake最低版本(cmake_minimum_required)、定义项目名称(project)和创建可执行文件(add_executable)。现代CMake还推荐为目标设置C++标准(如C++17)。通过实战练习可以掌握如何编写更完整的CMakeLists.txt,包括项目版本、语言声明和标准设置。

2025-06-24 11:19:44 441

原创 【CMake基础入门教程】学习规划&第一课:什么是CMake?

摘要:这是一个CMake入门课程的框架,分为四个阶段:从基础语法到进阶功能。第一课介绍了CMake的作用(生成跨平台构建文件而非直接编译),并通过一个简单的"Hello,CMake!"程序演示了基本使用流程:创建CMakeLists.txt→构建→运行。课程提供了详细的练习包(

2025-06-24 11:16:16 768

原创 Qt文件选择对话框代码解析 QFileDialog

这段代码使用Qt框架中的类来打开一个文件选择对话框,允许用户选择一个文件。

2025-06-17 14:21:50 278

原创 数组赋初值方法总结

在编程中,给数组赋初值的方法因语言而异。

2025-06-17 14:13:47 274

原创 已知波特率及数据帧长度,计算最小通讯周期

已知波特率及数据帧长度,计算最小通讯周期

2025-06-16 19:06:08 515

原创 【C++】原子加法函数fetch_add详解

fetch_add() 是 C++ 中 std::atomic 类型的一个成员函数,用于原子地(atomically)执行加法操作。它在多线程编程中至关重要,能确保数据竞争(data race)不会发生。以下是详细解析:

2025-06-16 19:02:31 1163

原创 【C++学习笔记】 std::atomic 拷贝构造错误解析

触发了 C++ 中的拷贝构造函数被显式删除(deleted)的限制。

2025-06-12 15:50:38 262

原创 【学习笔记】QT绘图和绘图设备

Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类

2025-02-19 11:06:06 877

原创 【学习笔记】QT文件系统

文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图(Qt5)

2025-02-19 11:03:58 665

原创 存储结构 分类

存储结构分为顺序存储结构、链式存储结构、散列存储结构、索引存储结构

2025-02-18 15:21:54 239

原创 MavLink协议入门

MAVLink是一个非常轻量化的开源的消息协议,用于无人机之间的通信以及无人机机载设备之间的通信。

2025-02-18 15:00:34 1693

原创 html学习笔记

最近工作需要需要接触前端开发,HTML语言作为前端三大件(html,css,script)当然是必须要熟悉的,一下是我刚整理代码,其中有很多自己的注释,希望对大家有帮助。运行环境:用vscode就行。

2024-10-23 17:15:21 181

原创 【Qt学习笔记】setModal()(模态对话框)

模态对话框是一种需要用户交互完成(例如通过点击“确定”、“取消”等按钮)之后,才能继续与应用程序其他部分交互的对话框。`setModal`是一个成员函数,通常在Qt框架中的窗口(widget)或对话框(dialog)类中找到。简而言之,这条代码的作用是确保当前窗口以模态方式显示,即在用户处理完此窗口之前,程序的其他部分将不可用,从而强制用户关注并响应这个窗口。在编程中,尤其是使用C++和Qt库进行图形用户界面(GUI)开发时,`this->setModal(true);` 这行代码具有特定的含义。

2024-10-09 10:27:10 603

原创 Visual Studio环境搭载

进入Visual Studio 官网后,选择 下载Windows版,并选择Community 2017 社区版本进行下载保存软件到电脑中。安装时间会依据网速、电脑设备等因素会不固定,因此可以在此期间刷个微博、抖音啥的。按钮 ,如果出现以下模板选项,证明安装成功,并可以创建C++项目!在百度搜索 visual studio,选择 如下图中的选项。安装成功后提示重启,点击重启完成剩余配置。双击运行下载的安装文件,弹出安装界面。这一选项,如需其他,自行勾选。至此,C++的开发环境搭建完毕。点击安装按钮开始安装。

2024-05-14 21:13:33 300

原创 CMainFrame中的OnCreatClient()函数

在MFC(Microsoft Foundation Classes)框架中,`OnCreateClient()`函数是`CFrameWnd`类(以及继承自它的类,如`CMainFrame`)的一个虚拟成员函数。在这个例子中,`m_wndView`是一个假设的视图类成员变量,通过`Create`函数创建视图窗口,并将其附加到框架窗口的客户区。如果视图创建成功,函数应返回`TRUE`;例如,如果你的应用程序使用文档/视图架构,你可能会在这个函数中创建并附加一个视图类的实例到框架窗口的客户区。

2024-05-13 18:47:55 454

原创 MFC--CCreateContext结构体

这段代码片段展示了如何使用`CCreateContext`结构体在MFC应用程序中动态创建并显示一个新的视图(在这里是`CUserDlg`类的一个实例)到一个拆分窗格(`CSplitterWnd`)中。- 在刚刚清空的位置(第0行第1列)使用`CCreateContext`中的信息创建一个新的`CUserDlg`视图,并指定了初始大小为600x500像素。- 设置当前框架窗口指针,这里的`this`通常指的是当前拥有拆分窗格的窗口对象,用于指定新视图的上下文框架。

2024-05-11 17:21:02 1889

原创 CMainFrame的OnCreate()函数

OnCreate()`函数是一个非常重要的成员函数,其主要职责是响应`WM_CREATE`消息。请注意,返回值`0`表示窗口创建成功,而`-1`通常表示创建过程中出现了错误。3. **创建子窗口**:如菜单栏、工具栏、状态栏等UI组件通常在此时被创建并附加到主框架窗口上。1. **初始化成员变量**:设置窗口的初始状态或为类的成员变量赋予初始值。2. **配置窗口风格**:可以通过修改窗口的样式来改变其行为或外观。4. **注册消息处理程序**:可以注册窗口类以处理特定的消息或命令。

2024-05-10 19:10:59 792

原创 Qt中使用静态函数调用emit信号

在这个例子中,ConnectionHelper::triggerSendMessage是一个静态函数,它接收一个MessageSender实例和一个消息字符串作为参数,然后调用该实例的槽函数doSendMessage,进而发射sendMessage信号。使用静态函数作为连接助手,意味着你创建一个静态函数来帮助触发某个QObject实例的信号,而不是直接定义静态信号(因为Qt不支持)。假设我们有一个MessageSender类,它有一个信号用于发送消息,我们想通过一个静态函数来辅助触发这个信号。

2024-05-08 14:08:24 1553

原创 函数调用方式__stdcall和__cdecl详解

**名称修饰**:除了函数名前缀`_`之外,在Visual C++中,函数名后还会附加一个`@`符号,后面跟着参数的总字节数,例如`_MyFunction@16`表示有四个字节的参数(32位系统中,每个参数通常占4字节,共四个参数)。- **名称修饰**:在Visual C++等编译器中,函数名通常会被编译器加上前缀`_`,对于C++成员函数还会加上类名修饰。- **参数传递顺序**:与`__cdecl`相同,参数也是从右到左入栈。- **默认情况**:这是C和C++程序的默认调用约定。

2024-05-07 16:26:12 465

原创 const与define用法区别

现代C++编程推荐优先使用`const`、`constexpr`和枚举类型(`enum class`)来代替`#define`定义常量。- `#define`: 宏在预处理器阶段就被展开,不分配内存,它们实际上并不存在于编译后的程序中。- `const`: 定义的常量具有数据类型,因此在编译期间可以进行类型检查,有助于避免类型错误。- `#define`: 定义的宏在整个文件中都是可见的,没有作用域限制,容易引起命名冲突。- `const`: 在编译阶段处理,是真正的变量,只是不可修改。

2024-05-02 00:33:05 338

原创 在C++中,单冒号(:)的作用

在构造函数的定义中,单冒号后面紧跟着的是成员初始化列表。在类定义时,如果类是从另一个基类继承而来,单冒号用于指定继承关系,如 `class DerivedClass : public BaseClass`。这里,`public` 是访问修饰符,指定继承的访问权限。在这个例子中,构造函数体为空,因为所有必要的初始化工作已经在成员变量初始化列表中完成了。总结来说,单冒号在C++中主要用于构造函数初始化列表、继承关系的声明以及条件运算符中,是语法中不可或缺的一部分,用于明确指定初始化、继承和条件选择等重要概念。

2024-04-29 10:08:47 682

原创 qt中lineEdit设置为不可编辑

setEnabled(false)`会禁用整个`QLineEdit`控件,使其不仅无法编辑,而且视觉上看起来更“灰暗”或“失效”。`setReadOnly(true)`会使`QLineEdit`变为只读模式,用户不能直接修改其文本内容,但仍能通过代码更改,并且文本仍可被选中、复制等。通常情况下,如果只是希望禁止用户输入而不影响其他交互(如文本可见、可复制),使用`setReadOnly(true)`更为合适。如果需要完全禁用该控件的所有交互,使用`setEnabled(false)`更加合适。

2024-04-28 19:50:07 3247

原创 qt环境下给lineEdit设置数值精度为0.5

如果您希望用户只能输入以0.5为步进的数值,可以直接使用`QDoubleSpinBox`代替`QLineEdit`。在Qt环境中,要为`QLineEdit`控件设置数值输入的精度为0.5,即允许用户输入以0.5为步进单位的数值,通常并不直接通过`QLineEdit`本身来实现,因为`QLineEdit`默认用于接收任意文本输入。您可以连接`QLineEdit`的`textEdited`信号,当文本发生变化时进行实时验证和格式化。若坚持使用`QLineEdit`,则需要自行实现相关验证与转换逻辑。

2024-04-27 12:05:38 1100

原创 qt中的取整函数

在实际编程中,根据具体应用场景选择合适的取整函数即可。如果您需要其他类型的取整行为(如向零取整、 bankers rounding 等),可能需要借助标准C++库或其他第三方库提供的功能。如果小数部分恰好为0.5,它遵循“四舍六入五成双”的规则,即如果前一位数字是奇数,向上舍入;该函数返回大于或等于给定浮点数的最小整数。如果输入值是正数,它会将小数部分去掉并增加到下一个整数;如果是负数,它会返回与输入值相等的整数(即不改变负数的值)。对于负数,它会减去小数部分并进一步减一,使结果更小。

2024-04-26 17:50:58 2728

原创 qt可以分批次读取一个大文件吗

Qt 提供了多种方法来分批次(分块)读取大文件,避免一次性加载整个文件到内存。以下是一种常见的分批次读取大文件的方法,使用。

2024-04-17 14:11:00 1080

原创 VS快捷键

13. **Ctrl + Shift + Tab**: 切换打开的文件(反向)11. **Ctrl + K, Ctrl + U**: 取消注释选定的代码。12. **Ctrl + K, Ctrl + D**: 格式化选定的代码。10. **Ctrl + K, Ctrl + C**: 注释选定的代码。13. **Ctrl + K, Ctrl + F**: 格式化整个文档。6. **Ctrl + Shift + V**: 粘贴到匹配的代码。3. **Ctrl + Shift + N**: 新建项目。

2024-04-09 23:23:45 300

原创 【C++对C语言的拓展】引用--3

如果 ref 不是 const 的,那么改变 ref 值,修改的是 temp,而不是 val。(1)const 对象的引用必须是 const 的,将普通引用绑定到 const 对象是不。而被引用的对象是 val,是非 const 的,所以 val。的修改并未 影响 ref 的值,而 ref2 的值发生了相应的改变。const 引用的目的是,禁止通过修改引用值来改变被引用的对象。(2)const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初。

2024-04-08 08:43:31 659

原创 【C++对C语言的拓展】引用--2

2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占。c++中引入引用后,可以用引用解决的问题。3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。引用在实现上,只不过是把:间接赋值成立的三个条件的后两步和二为一.1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针。可以成为其他引用的初始值(可作为右值使用,也可作为左值使用)一个实参地址,传给了形参引用(常量指针)。1) 引用在C++中的内部实现是一个常指针。1.7 引用作为函数的返回值(引用当左值)

2024-04-07 00:02:49 378

Wireshark网络封包分析软件

Wireshark 是一款网络封包分析软件。它可以用于捕获和分析计算机网络中传输的数据包,帮助用户深入了解网络通信和故障排除。Wireshark 提供直观的图形界面,并支持多种协议的解析,如 Ethernet、TCP、UDP、HTTP 等。使用 Wireshark,用户可以查看和分析网络流量,检测网络问题、优化网络性能,并且对于网络安全方面的审计和监控也非常有用。

2024-03-06

网口灌包测试工具iperf1.7.0.rar

网口灌包测试工具 iperf1.7.0.rar 发送端:iperf.exe -u -c 226.0.0.80 -p 8000 -b 4M -t 60000 -i 1 接收端:iperf.exe -s -u -B 226.0.0.80 -p 8000 -i 1 下面逐个解释各个参数的含义: - **iperf.exe**:Iperf 是一个用于测量TCP和UDP带宽质量以及网络延迟的小型工具。 - **-u**:指定使用 UDP 协议进行传输测试,而不是默认的 TCP。 - **-c 226.0.0.80**:指定服务器端的 IP 地址为 `226.0.0.80`,客户端将连接到这个地址进行性能测试。 - **-p 8000**:设置使用的端口号为 `8000`,客户端将在该端口上与服务器建立连接。 - **-b 4M**:设置带宽限制为 `4M`,即4兆比特每秒(Mbps)。这意味着客户端会尝试以最大4Mbps的速度发送数据。 - **-t 60000**:设置测试运行的时间长度为 `60000` 秒,即10分钟。 - **-i 1**:设置报告间隔时间为 `1` 秒

2024-03-06

basenew数据分析软件

besnew二进制查看工具,同样支持十六进制、八进制的查看,包括处理,分析,识别帧,右键管理员权限运行

2024-03-06

串口助手+虚拟串口+网络调试助手

【网络调试助手】 一、使用场景: 项目定制需求:前端的车载终端把gps、报警信息、报警图片、其他检测数据发往约定的第三方服务器,车载终端通过公网(SIM拨号或者有线网)以udp或者tcp连接服务器,并把数据发往服务器。因为项目开发时一般要不到现场实际服务器的ip和端口以及服务器环境。那么就可以通过NetAssist网络助手工具模拟服务器,模拟测试车载端的数据是否能够发送正常、正确。 二、软件介绍 (1)软件界面:协议类型可下拉选择tcp/udp及Server或者Client (2)把协议类型、IP地址(PC机地址) 端口配置好后,点击“连接”即可。另外接收区和发送区可以根据要求进行配置。 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 【虚拟串口及串口调试助手】 虚拟串口可以在mcu中直接虚拟一个串口,这样我们就可以使用串口助手直接查看该串口数据的收发情况,对于调试串口助手上位机非常有帮助

2024-02-24

UDP、TCP网络调试助手

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 一、使用场景: 项目定制需求:前端的车载终端把gps、报警信息、报警图片、其他检测数据发往约定的第三方服务器,车载终端通过公网(SIM拨号或者有线网)以udp或者tcp连接服务器,并把数据发往服务器。因为项目开发时一般要不到现场实际服务器的ip和端口以及服务器环境。那么就可以通过NetAssist网络助手工具模拟服务器,模拟测试车载端的数据是否能够发送正常、正确。 /////////////////////////////////////////////////////////////////// 二、软件介绍 (1)软件界面:协议类型可下拉选择tcp/udp及Server或者Client (2)把协议类型、IP地址(PC机地址) 端口配置好后,点击“连接”即可。另外接收区和发送区可以根据要求进行配置。

2024-02-24

空空如也

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

TA关注的人

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