自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

琅嬛福地

寒江孤影,江湖故人,相逢何必曾相识

  • 博客(876)
  • 资源 (20)
  • 收藏
  • 关注

原创 C++ Qt零基础入门进阶与企业级项目实战教程与学习方法分享

介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。

2023-09-21 23:00:33 4621

原创 opengl tinygltf基本概念

在OpenGL中显示GLB模型时,使用库解析模型数据会涉及一些关键概念。

2025-05-08 15:13:07 476

原创 python装饰器

类装饰器可以灵活地修改类的行为,适用于需要在类定义时进行修改的场景。通过类装饰器,开发者可以轻松地扩展类的功能,而无需直接修改类的代码。

2025-04-18 09:18:54 311

原创 C++ SFINAE

SFINAE是C++模板编程中的一个重要概念,全称是"Substitution Failure Is Not An Error"(替换失败不是错误)。它允许我们在编译期间基于类型特性选择正确的函数重载或模板特化。

2025-03-30 00:30:00 372

原创 C++萃取

萃取是一种用于从类型中"萃取"(提取)信息的技术,通常通过模板特化实现。获取类型的特性根据类型选择不同的算法为不同类型提供统一的接口// 迭代器萃取示例// 使用Iterator自身定义的类型// 为原生指针特化的萃取// 基于萃取的泛型函数// 使用萃取获取迭代器的值类型std::cout << "处理的元素类型大小: " << sizeof(value_type) << " 字节" << std::endl;// 使用迭代器处理元素...for (

2025-03-30 00:15:00 376

原创 Java反射用法介绍

Java 反射(Reflection)是 Java 语言的一个强大特性,它允许程序在运行时获取类的信息,检查和操作类的字段、方法、构造器等,甚至可以创建新的对象实例、调用方法和访问或修改字段值。

2025-03-29 09:08:31 298

原创 Android Zygote和System进程的启动过程

Zygote进程:负责孵化应用程序进程,通过预加载类和资源提高应用启动速度。System进程:负责启动和管理Android系统的核心服务,确保系统的正常运行。这两个进程的启动是Android系统启动的重要组成部分,确保了应用程序和系统服务的顺利运行。理解这两个进程的启动过程对于深入理解Android系统的工作机制是非常重要的。

2025-03-29 09:01:54 492

原创 Android logcat使用介绍

Android Logcat 是一个用于查看和分析 Android 应用程序日志输出的工具。它可以帮助开发者调试应用程序,跟踪错误和性能问题。Logcat 提供了一个命令行接口,可以在 Android Studio 中通过 Logcat 面板查看日志。

2025-03-29 08:57:47 575

原创 OpenGL MVP变换

在OpenGL中,(Model-View-Projection Transformation)是3D图形渲染的核心流程,它将物体的局部坐标通过一系列矩阵变换最终映射到屏幕空间。。

2025-03-24 11:17:50 757

原创 GLB文件介绍

是由支持的软件或工具生成的。glTF是一种开放的3D模型传输格式,而GLB是其二进制版本,通常用于嵌入纹理和模型数据。

2025-03-21 18:25:07 715

原创 Android HAL服务注册与获取服务

在Android HAL(硬件抽象层)开发中,当使用HIDL(硬件接口定义语言)定义接口时,生成的C++头文件会包含一个关键的函数。该函数的作用是将HAL实现注册到系统服务管理器,使其他进程能够发现并调用该服务。用于将HAL接口的实现实例注册到Android的(HIDL服务管理器)。注册后,客户端(如Android框架或应用)可通过服务名称查找并绑定该服务。默认注册的服务名称为接口的(如"default"或"slot0"也可以通过参数指定自定义名称(例如。

2025-03-21 09:35:05 1053

原创 C++ fallthrough

C++ 中的是一个用来明确表示switch语句中的标签之间的执行流会“掉入”下一个case标签的机制。在传统的switch语句中,如果没有break语句,程序会继续执行下一个case代码块的内容,这种行为称为“fallthrough”(掉入)。不过,这种行为容易导致错误,因为编译器不会给出明确的提示,通常会误导开发者。为了解决这个问题,C++17 引入了一个新的属性,它显式地告诉编译器和其他开发者:当前case语句的执行流会跳到下一个case,即“fallthrough”是有意为之,而不是一个错误。

2025-03-14 15:41:35 352

原创 C++ std::atomic_long compare_exchange_strong用法介绍

是其一个成员函数,用于实现一种无锁的原子比较和交换操作。以下是一个简单的代码示例,展示如何使用。是 C++ 标准库提供的原子类型,

2025-03-10 15:46:46 668

原创 OpenGL窗口变换、裁减、剪切与反馈

在OpenGL中,窗口变换、裁剪、剪切和反馈是图形渲染管线中的重要概念。

2025-03-10 09:12:32 387

原创 OpenGL纹理数组

在 OpenGL 中,是一种特殊的纹理类型,它允许我们将多个纹理存储在一个纹理对象中,并通过索引访问不同的纹理层。纹理数组的主要优势是可以减少绑定纹理的操作,从而提高性能,尤其是在需要频繁切换纹理的场景中。以下是实现步骤以及完整代码示例,使用和。

2025-03-05 07:45:00 352

原创 OpenGL 3D纹理

3D纹理(也称为体积纹理)是纹理映射的扩展,从2D平面扩展到3D空间。与2D纹理不同,3D纹理在三个维度上存储数据(宽度、高度和深度),允许在整个3D空间中采样,而不仅仅是在平面上。这个示例提供了一个坚实的3D纹理基础,可以根据特定需求进一步扩展和优化。例如,可以实现更复杂的体积渲染算法、添加光线行进技术或创建更复杂的程序化3D纹理。

2025-03-04 11:21:30 1005

原创 C++ OpenGL 表面剔除 (Face Culling)

表面剔除是一种优化技术,可以减少渲染不必要的图元,提高渲染性能。它基于一个简单原则:对于封闭的3D物体,观察者在任何时候最多只能看到一半的面(除非是透明物体)。通过剔除背向观察者的面,可以节省大量的片段着色器计算。:通过顶点的环绕顺序定义面的正面和背面:可以选择剔除正面、背面或两者。

2025-03-04 11:08:49 820

原创 C++ OpenGL 帧缓冲(Framebuffer)理论与实现

这个示例仅展示了基本用法,帧缓冲在实际应用中通常会结合更复杂的着色器和多重缓冲技术。在实际开发中需要根据具体的渲染需求调整帧缓冲的配置和附件类型。帧缓冲对象(FBO)是OpenGL中一种允许我们创建自定义渲染目标的对象。

2025-03-04 11:05:20 989

原创 android .hal文件编写以及C++编译链接hal生成的代码

包括接口的方法和属性。

2025-03-03 09:00:00 983

原创 android::IPCThreadState::self使用介绍

是 Android Binder IPC(Inter-Process Communication,进程间通信)机制中一个非常重要的函数。它主要用于管理当前线程与 Binder 驱动之间的交互状态。Binder 是 Android 中的核心 IPC 机制,而是负责管理线程级别的 Binder 状态的关键类。transactreplytransact以下是一些常见的场景和代码片段,展示了。

2025-03-03 08:15:00 1230

原创 android .rc文件

在 Android 系统中, 文件主要是 init 脚本,用于定义和配置 Android 系统的启动过程。 文件的扩展名通常为 ,例如 、、 等。这些文件是 Android 的 进程(系统的第一个用户态进程)读取和解析的脚本,它们控制系统服务、设备驱动程序、属性初始化等内容。 文件的主要用途可以总结为以下几点:启动服务:挂载文件系统:设置系统属性:权限管理:加载驱动程序:事件触发:一个 文件通常由以下几部分组成:命令部分:服务定义部分:触发器部分:使用 设置系统属性。2. 挂载文件系统使用 挂载

2025-03-03 08:00:00 561

原创 android bp构建编译C++代码

等模块类型,可以轻松地构建动态库、静态库和可执行文件。合理地组织项目结构和配置 BP 文件,可以让构建流程更加高效和清晰。文件的作用是定义如何编译、链接和打包项目中的组件,例如库(静态库、动态库)、可执行文件、AIDL 文件、资源等。(简称 BP)是一种基于 JSON 的构建配置文件格式,代替了传统的。,它是 Android 的 Soong 构建系统所使用的配置文件格式。以下是一个完整的项目示例,展示了如何使用 BP 文件定义模块。指定模块所依赖的共享库。指定模块所依赖的静态库。模块的名称,必须唯一。

2025-03-02 04:15:00 588

原创 android::hardware::configureRpcThreadpool使用介绍

的主要作用是设置服务的线程池,以便高效处理客户端请求。通常和配合使用,会启动线程池并阻塞当前线程,直到服务终止。合理配置maxThreads和参数,可以根据服务的需求优化性能。

2025-03-01 23:59:27 683

原创 Android Binder 用法详解

创建文件// 接口标识符enum {// 接口定义public:// 声明接口元信息// 纯虚函数,需要子类实现// 服务端接口public:// onTransact 函数处理来自客户端的请求完整的 IPC 框架:支持跨进程方法调用类型安全:通过接口定义保证类型安全高性能:直接在 native 层实现,避免了 JNI 开销安全性:支持身份验证和访问控制。

2025-03-01 00:17:58 1456

原创 TCP长连接与短连接

心跳机制是维持TCP长连接的关键技术,用于检测连接是否仍然有效,防止空闲连接被网络设备(如防火墙、路由器)关闭。心跳机制虽增加了少量网络开销,但在保持长连接稳定性方面发挥着重要作用,是长连接技术的基础保障。短连接是指客户端与服务器完成一次数据交换后就断开连接。下次需要通信时,再重新建立连接。在实际应用中,应根据具体业务需求、服务器承载能力和用户体验需求来选择合适的连接方式。长连接是指在一次TCP连接建立后保持连接状态,多次数据交换都复用这个连接。

2025-03-01 00:06:54 428

原创 C++内部类用法介绍

是在另一个类的作用域内定义的类。它的主要作用是封装逻辑关系紧密的类,使其不能被外部直接访问,从而增强封装性和代码的可读性。内部类不能直接访问外部类的成员,但可以通过外部类对象的引用或指针来访问。内部类是 C++ 代码组织的重要手段,使用得当可以提高代码的。如果内部类需要直接访问外部类的私有成员,可以将其声明为。,这决定了外部类和外部代码对其访问的权限。内部类可以用来封装某些结构或节点,例如。的内部类,实现了自定义迭代器的功能。的友元类,所以它可以直接访问。内部类不能直接访问外部类的非。

2025-02-28 17:12:24 75

原创 android智能指针android::sp使用介绍

是 Android 中的智能指针(Smart Pointer)的实现,用于管理对象的生命周期,避免手动管理内存泄漏等问题。是引用计数智能指针。它会在对象的引用计数变为零时自动释放对象。此外,Android 还提供了。在 Android 的 HAL(硬件抽象层)和 Binder 通信中非常广泛。的核心是对目标对象的引用计数进行管理。库中重要的一部分,常用于管理继承自。(弱指针),用于解决循环引用的问题。以下是一个完整的例子,演示如何使用。如果你需要避免循环引用,可以使用。提供了引用计数的功能。

2025-02-28 15:00:00 553

原创 C++ Qt常见面试题(10):Qt D指针(d_ptr)与Q指针(q_ptr)

Pimpl模式是一种常见的编程技巧,它通过将类的私有数据和实现放入一个独立的类中,从而避免了类实现的改变影响到类的用户代码。Pimpl模式通常会用到一个指针来指向这个独立的类。d_ptr和q_ptr是Qt用来实现Pimpl设计模式的工具,帮助Qt实现类的封装性、二进制兼容性和优化编译性能。通过在Qt类中使用d_ptr和q_ptr,可以将类的接口与实现分离,使得外部代码不需要关心类的实现细节。这种设计方式通常用于大型项目中,尤其是在Qt的库中广泛使用,可以避免因为实现变动导致的二进制不兼容问题。

2025-02-28 09:00:00 97

原创 C++ Qt常见面试题(9):TCP粘包问题以及解决办法

可以确保接收端能够正确区分并处理完整的消息,避免粘包问题。这样即使多个消息被TCP合并到一个包中,接收端也能够根据长度字段正确地解析出每个完整的消息。如果发送方连续发送多个数据包,而接收方在接收时没有办法区分每个数据包的边界,可能会发生粘包现象。:Nagle算法会尽量减少发送小的数据包,如果发送的数据非常小,TCP可能会把多个小数据包合并成一个大的数据包发送。:操作系统的内核会进行一定的缓存处理,以优化网络传输,可能会合并多个小包,造成粘包现象。,通过定义明确的包结构,使得每个包都能够被正确识别和解析。

2025-02-28 08:00:00 135

原创 C++ Qt常见面试题(8):C++ Qt中的线程同步与互斥

和QMutex的组合非常适合实现生产者-消费者模型,或任何需要线程等待某些条件满足的场景。QMutex用于保护共享资源的访问,而用于在资源条件不满足时让线程等待,并在条件满足时唤醒等待的线程。

2025-02-28 00:00:00 124

原创 C++ Qt常见面试题(7):QPainter的基本用法

QPainter是 Qt 中功能强大的 2D 图形绘制工具,适用于各种绘图需求。通过对画笔、画刷、字体和坐标变换的灵活控制,开发者可以轻松绘制各种图形元素。上绘制各种图形内容(如直线、矩形、文字、图片等)。它是 Qt 的 2D 图形绘制的核心工具,广泛用于自定义控件、绘制背景、图形编辑器等场景。支持坐标变换(平移、旋转、缩放),可以对绘图进行复杂的几何变换。的基本用法和高级功能,可以满足大多数 2D 绘图需求。是常见的内存绘图设备,可以将绘制结果保存为图片文件。是 Qt 提供的一个强大的绘图类,用于在。

2025-02-27 09:00:00 74

原创 C++ Qt常见面试题(6):QThread 和 QtConcurrent 之间有何区别

QThread 和 QtConcurrent是Qt中两种用于实现多线程编程的工具,它们设计目标和适用场景不同。以下是它们的详细对比和使用说明。通过将对象移动到线程中运行逻辑,适合需要运行事件循环的场景。用于运行普通函数或任务,返回一个。用于并行处理容器中的数据。方法来定义线程的逻辑。对象以监控任务状态。

2025-02-27 08:30:00 90

原创 C++ Qt常见面试题(5):Qt信号槽与C++函数指针的区别

都是用于实现程序中函数调用或消息传递的机制。然而,它们的设计目标、使用场景、功能和灵活性有很大的区别。以下是它们的详细比较及代码示例。以下示例展示了如何使用 Qt 信号与槽和 C++ 函数指针分别实现按钮点击回调。以下是一个 Qt 信号与槽的简单示例,展示如何在按钮点击时触发槽函数。以下是一个使用函数指针实现类似信号槽机制的示例。

2025-02-27 08:00:00 186

原创 C++ Qt常见面试题(4):Qt事件过滤器

Qt 的事件过滤器是一种强大的机制,适用于需要拦截和处理对象事件的场景。通过自定义事件过滤器并将其安装到目标对象或全局应用程序上,可以实现灵活的事件处理逻辑。在使用时,应注意合理设计过滤器逻辑,避免性能问题或不必要的事件拦截。)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。以下代码实现了一个简单的事件过滤器,用于拦截按钮的鼠标点击事件,并在点击时输出相关信息。在 Qt 中,事件过滤器(

2025-02-26 21:26:09 219

原创 C++ Qt常见面试题(3):Qt内存管理机制

Qt 内存管理机制是其框架的重要组成部分,目的是简化开发者对内存的管理,减少内存泄漏的风险,同时提供高效的资源使用方式。实现了一种自动化的内存管理方式,极大地减少了内存泄漏的风险。开发者只需负责顶层父对象的生命周期,其子对象会自动销毁。的设计,通过智能管理对象的生命周期来实现自动化的内存释放。以下是 Qt 内存管理机制的详细介绍。在开发中合理使用这些机制和工具,可以高效、安全地管理内存资源,避免常见的内存问题。从 Qt 5 开始,Qt 引入了智能指针来简化内存管理,特别是对非。Qt 的内存管理机制以。

2025-02-26 21:15:37 310

原创 C++ Qt常见面试题(2):QT中的文件流(QTextStream)和数据流(QDataStream)的区别

是两种常用的流类,用于通过文件或其他 I/O 设备(如网络、内存)读写数据。虽然它们都可以用来操作数据,但它们的设计目标和使用场景不同。根据实际应用场景选择合适的流工具,可以更高效地完成任务。

2025-02-26 21:12:23 283

原创 C++ Qt常见面试题(1):Qt信号槽的理解

C++ 中的 Qt 信号槽机制是 Qt 框架中用于实现组件间通信的核心机制之一。它是一种观察者模式的实现,提供了一种安全、灵活且松耦合的方式来连接对象和处理事件。下面从10个方面来介绍C++ Qt信号槽的原理及使用技巧。

2025-02-26 21:05:35 485

原创 C++ Qt OpenGL渲染FFmpeg解码后的视频

本篇博客介绍使用OpenGL渲染FFmpeg解码后的视频,涉及到QOpenGLWidget、QOpenGLFunctions、OpenGL shader以及纹理相关。

2025-02-26 20:28:18 963

原创 OpenGL Blinn-Phong 光照模型原理与基于物理的渲染 (PBR)

Blinn-Phong 光照模型是一种经典的基于物理的光照模型,用于模拟光源与物体表面之间的交互效果。Blinn-Phong 模型是现代图形学的重要基础,尽管已被更复杂的光照模型(如 PBR 的基于物理的渲染)所取代,但它在学习和理解光照的基本原理时仍然非常重要,同时也是许多实时渲染场景的经典选择。是一种更加真实的渲染技术,与传统的 Blinn-Phong 模型相比,它更接近现实中的光照和材质行为。PBR 的核心思想是通过物理规律模拟光与材质之间的交互,从而实现更真实、统一的视觉效果。

2025-02-25 09:12:56 859

原创 在使用git时已经push到远程的文件夹怎么取消跟踪

【代码】在使用git时已经push到远程的文件夹怎么取消跟踪。

2025-02-25 08:28:48 299

C++ QMainWindow无边框窗口自定义标题栏可拖拽移动拉伸改变窗口大小

C++ QMainWindow无边框窗口自定义标题栏可拖拽移动拉伸改变窗口大小,适用于Win11、Win10, 自带窗口阴影圆角。

2024-04-23

C++ glog demo

C++ glog demo, 运行环境vs2019、VS2022,x86, 如果需要x64编译,需要自己下载编译glog x64的sdk

2024-04-23

Qt蓝牙串口源码支持十六进制发送、字符发送、定时发送

1、可以使用vs2019/vs2017 Qt进行编译 2、源码说明链接:https://mingshiqiang.blog.csdn.net/article/details/80733737

2022-02-22

c++ PImpl实现机制

**PIMPL** ,即Private Implementation,一般称之为类的私有化实现,PImpl主要有两个作用; (1)它让声明和实现进行解耦,在项目开发时,如果很多文件引用了该头文件,如果头文件改变了一些实现,那么在编译时,所有引用的文件也得重新编译一次,增加了c++程序的编译时间, 如果把实现用一个指针进行声明,改变实现的代码,只会关联一次,降低了耦合度,可以减少编译时间。 (2)Pimpl,也可以称之为pointer to implementation, 指向实现的指针,可以用来对“类的接口与实现”进行解耦,比如在sdk开发时,可以用这个技巧来避免在头文件中暴露私有细节,使sdk接口与实现保持完全分离。

2021-09-15

很全的 Qt qss

这是一个Qt第三方样式表,下载后,可以直接加到项目中使用。不知道怎么用的,可以关注我的Qt专栏。使用链接:https://mingshiqiang.blog.csdn.net/article/details/108860180

2020-09-29

jsoncpp_sdk_x64.rar

vs2017编译的jsoncpp sdk, 包含Debug和Release版本dll, lib , include,可以和其它sdk一样直接包含到项目中使用,可以去我的博客C++专栏找使用方法。

2020-04-06

ffplay源码架构图.vsdx

我用visio2016画的,把ffplay源码中的各个模块都展现出来了,有兴趣的可以去看看我的博客。

2019-12-08

MusicPlayer.rar

该音乐播放器使用Qt开发,代码用QtCreator编写,下载即可使用,主要用QMediaPlayer的一些功能,可以看我的博客讲解。

2019-11-17

Qt子线程更新数据发到主线程显示.rar

Qt的子线程无法直接更新主UI,需要发送信号到主线程进行更新,我用的QTableWidget展示数据。

2019-08-18

FileDownlod.rar

Qt实现的网络文件下载,用QtCreator可以直接打开编译,运行,我的博客有讲解,可以去看看。

2019-08-05

lua-5.3.4源码

lua5.3.4源码,导入VS2015可以直接编译,想学习分析Lua源码的可以下载,研究。

2019-01-10

中国象棋源码(C++/MFC)

用MFC写的中国象棋游戏,VS2015可以直接编译,有多重AI算法,有兴趣可以研究,全网最好的象棋代码。又不懂的可以看看我的博客,有讲解。

2018-12-24

Win10 Git Bash闪退的解决方案文件

当你的Win10系统出现Git Bash闪退时,需要该文件进行开启相关服务,可以参考我的博客进行解决。

2018-11-07

Halcon12与MFC数字识别详细教程

基于Halcon12的数字识别,识别精确,关于代码的解释,请关注的我的博客,在博客里我做了详细的解释。

2018-07-09

ffmpeg3.2.4_Win32开发库文件

ffmpeg3.2.4_Win32开发库文件,包含头文件,静态库lib, 动态库dll.

2018-06-03

Qt进度条QProgressBar的使用(详细代码)

详细的工程代码与注释,讲解Qt进度条QProgressBar的使用方法,完整的代码。

2018-05-03

支持向量机通俗导论(理解SVM的三层境界)PDF

这应该是全网最全最清晰的SVM学习的资料了,我学了10天,终于了解了,大家可以学学看。PDF文档学会后,可以结合OpenCV的源码看看,相信你们一定有大的收获。

2018-04-13

C# TCP网络通信示例:多人聊天发文件

该资源包含客户端,服务器, 用户注册到数据库(可自行裁剪该功能),通过TCP 实现聊天,发文件,可以多人同时聊天。代码有完整的注释,是完整的项目。

2018-04-02

华为C++/C/java代码规范(完整版)

最新的华为代码规范,适用于C++/C/java,高清带目录,格式标准的代码给自己和维护者都是一种享受,建议程序员多看看。

2018-03-14

C++/OpenCV2.4.9 数字精确识别源码

利用OpenCV的图像处理技术,对图像进行灰度处理,二值分析,降噪,滤波等,识别照片中的数字,完美精确, C++ VS2015代码,有详细的代码注释,完整源码。

2017-11-02

C# Winform数值实时曲线(完整示例)

C#实现显示实时数据,并形成曲线,保存数据,完整的项目代码

2017-07-01

空空如也

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

TA关注的人

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