当前位置: 首页 > news >正文

简单介绍Qt的属性子系统

深入理解Qt的属性系统

​ 笔者最近正在大规模的开发Qt的项目和工程,这里笔者需要指出的是,这个玩意在最常规的Qt开发中是相对比较少用的,笔者也只是在Qt的QPropertyAnimation需要动画感知笔者设置的一个属性的时候方才知道这个东西的。因此,这篇文章的属性更加象是整合和消化,请各位Qt大佬批评指正。

先说说Qt的属性系统可以做啥

​ 我不想一上来就扔出来一大堆概念和写法,这没意思,看着啥也看不懂就来整一处,只会把人吓跑。

更加高级的和封闭的属性读写机制(C++的反射和动态属性)

​ 在纯 C++ 环境下,通过 QObject::setProperty 和 QObject::property,开发者可以在不知道具体类定义的情况下,以字符串形式读写对象属性,从而实现对第三方或未知类型对象的动态操作,这在插件系统或运行时配置中尤为有用。如果需要在不同线程之间安全地调用方法,也可以借助 QMetaObject::invokeMethod 配合 Qt::QueuedConnection,将对属性的修改或方法调用排入目标线程的事件队列,从而避免手动管理互斥锁和死锁风险。这个就是把对对象属性的修改扔到巨大的事件循环队列中,事件循环队列是保证我们的数据读写不会发生争夺,必须按照顺序一个个执行的。

UI 自动化与 Qt Designer 集成

​ Qt Designer 以及 Qt Quick Designer 均依赖元对象系统和属性系统来生成可视化属性面板。无论是 QWidget 还是 QML 项目,当在设计器中选中控件时,右侧属性编辑器都会列出该控件所有可设计属性,包括可脚本化(SCRIPTABLE)和可存储(STORED)的属性,通过动态读取 QMetaObject 数据实现即时更新和回显,这为界面原型设计和主题定制提供了极大便利。这个事情在笔者之后体验如何自己制作自己的插件的时候会进行尝试。

QML 中的数据绑定与模型驱动(这个没做过,gpt这样说的)

在 QML 层面,属性系统是响应式界面的基石。将 C++ 对象通过 QQmlContext 或 qmlRegisterType 暴露给 QML 时,凡是使用 Q_PROPERTY 宏声明并带有 NOTIFY 信号的属性,都可以在 QML 中像普通属性一样使用绑定表达式。当模型层的属性在 C++ 侧被修改时,对应的 QML 界面会自动更新,无需手动编写额外的同步代码,这使得使用 Qt Quick 构建数据驱动型界面变得直观而高效。即便是在复杂的逻辑场景下,QML 引擎也会跟踪属性的依赖关系,在底层的 BindingEvaluator 中智能地避免多余的计算与重绘,从而兼顾性能和开发效率

动画、状态机与属性驱动

Qt 的动画框架广泛使用属性系统来驱动动画效果。QPropertyAnimation 类通过属性名称来获取和设置目标对象的属性值,并在不同时间点上插值更新,例如对 QWidget 的 geometry、opacity 或自定义属性进行平滑过渡;在状态机(QStateMachine)中,也可以使用属性动作(QPropertyAction)根据状态切换自动修改属性,从而将动画与状态逻辑解耦,简化状态驱动的界面行为实现。这个在笔者自己手搓网易云的动画效果的时候又遇到过,笔者会在那里详细的说明这个用途

非常心动,所以咋玩

​ 很正常的想法!这个属性非常的有趣,所以我们需要怎么做呢?答案是下面的:

Q_PROPERTY(type name(READ getFunction [WRITE setFunction] |MEMBER memberName [(READ getFunction | WRITE setFunction)])[RESET resetFunction][NOTIFY notifySignal][REVISION int | REVISION(int[, int])][DESIGNABLE bool][SCRIPTABLE bool][STORED bool][USER bool][BINDABLE bindableProperty][CONSTANT][FINAL][REQUIRED])

​ 注意,这些代码实际上啥也不会留下,他是给我们的MOC提供信息用的。告诉我们这个属性的性质,名称,如何读写等等方法。举个例子:

Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)

​ 依次说明了如下的基本事实:

1. Q_PROPERTY(bool focus READ hasFocus)

声明了一个名为 focus 的布尔类型属性:

  • READ:通过 hasFocus() 方法读取属性值(无写入功能)。
  • 用途:通常表示控件是否获得键盘焦点(如输入框被选中时)。
  • 特点:这是一个只读属性,无法直接修改(没有 WRITEMEMBER 标记)。

2. Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)

声明了一个名为 enabled 的布尔类型属性:

  • READ:通过 isEnabled() 方法读取属性值。
  • WRITE:通过 setEnabled(bool) 方法修改属性值。
  • 用途:控制控件是否启用(禁用时通常变灰且不响应用户输入)。
  • 特点:支持读写,修改时会自动触发 Qt 的属性系统通知(如信号或样式更新)。

3. Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)

声明了一个名为 cursorQCursor 类型属性:

  • READ:通过 cursor() 方法获取当前光标样式。
  • WRITE:通过 setCursor(QCursor) 方法设置光标样式(如鼠标悬停时变为手型)。
  • RESET:通过 unsetCursor() 方法恢复默认光标(移除自定义设置)。
  • 用途:动态改变控件的光标外观。
  • 特点:支持读、写和重置操作,灵活性更高。
#include <QObject>
class Person : public QObject
{Q_OBJECTQ_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
public:explicit Person(QObject *parent = nullptr) : QObject(parent) {}QString name() const { return m_name; }void setName(const QString &name) {if (m_name != name) {m_name = name;emit nameChanged();}}
signals:void nameChanged();
private:QString m_name;
};// 在某处使用
Person p;
p.setProperty("name", "Alice");
QString current = p.property("name").toString();

​ 当然,这样我们就完成了一次对属性的读写。这个的好处其实跟正常的get set接口类似,但是多了Qt上的很多元对象支持,就是我刚刚提到的那些。

附录:属性文档

  • 如果未指定 MEMBER 变量,则需要一个 READ 访问器函数。该函数用于读取属性值。理想情况下,使用 const 函数来实现此目的,并且它必须返回属性的类型或该类型的 const 引用。例如,QWidget::focus 是一个只读属性,其 READ 函数为 QWidget::hasFocus()。如果指定了 BINDABLE 变量,则可以编写 READ default 来从 BINDABLE 变量生成 READ 访问器。
  • WRITE 访问器函数是可选的。它用于设置属性值。它必须返回 void,并且必须只接受一个参数,该参数可以是属性的类型、指向该类型的指针或引用。例如,QWidget::enabled 具有 WRITE 函数 QWidget::setEnabled()。只读属性不需要 WRITE 函数。例如,QWidget::focus 没有 WRITE 函数。如果您同时指定了 BINDABLE 和 WRITE 的默认值,则系统会从 BINDABLE 生成一个 WRITE 访问器。生成的 WRITE 访问器不会显式发出任何使用 NOTIFY 声明的信号。您应该将该信号注册为 BINDABLE 的变更处理程序,例如使用 Q_OBJECT_BINDABLE_PROPERTY。
  • 如果没有指定 READ 访问器函数,则需要 MEMBER 变量关联。这使得给定的成员变量无需创建 READ 和 WRITE 访问器函数即可读写。如果您需要控制变量访问,除了 MEMBER 变量关联之外,仍然可以使用 READ 或 WRITE 访问器函数(但不能同时使用)。
  • RESET 函数是可选的。它用于将属性设置回其上下文相关的默认值。例如,QWidget::cursor 具有典型的 READ 和 WRITE 函数,即 QWidget::cursor() 和 QWidget::setCursor(),此外它还具有 RESET 函数,即 QWidget::unsetCursor(),因为任何对 QWidget::setCursor() 的调用都不能重置为上下文特定的游标。RESET 函数必须返回 void 且不接受任何参数。
  • NOTIFY 信号是可选的。如果定义,则应指定该类中一个现有的信号,该信号在属性值发生变化时发出。MEMBER 变量的 NOTIFY 信号必须接受零个或一个参数,并且该参数必须与属性的类型相同。该参数将采用属性的新值。NOTIFY 信号应仅在属性确实发生更改时发出,以避免在 QML 中不必要地重新评估绑定。当通过 Qt API(QObject::setProperty、QMetaProperty 等)更改属性时,会自动发出信号,但直接更改 MEMBER 时则不会发出信号。
  • REVISION 编号或 REVISION() 宏是可选的。如果包含,则它定义了在特定 API 版本(通常用于暴露给 QML)中使用的属性及其通知信号。如果不包含,则默认为 0。
  • DESIGNABLE 属性指示该属性是否应在 GUI 设计工具(例如 Qt Widgets Designer)的属性编辑器中可见。大多数属性都是 DESIGNABLE(默认为 true)。有效值为 true 和 false。
  • SCRIPTABLE 属性指示此属性是否应由脚本引擎访问(默认为 true)。有效值为 true 和 false。
  • STORED 属性指示应将属性视为独立存在还是依赖于其他值。它还指示在存储对象状态时是否必须保存属性值。大多数属性都是 STORED 属性(默认为 true),但例如 QWidget::minimumWidth() 的 STORED 属性为 false,因为它的值取自 QWidget::minimumSize() 属性的宽度部分,而该属性的类型为 QSize。
  • USER 属性指示该属性是被指定为面向用户的属性还是用户可编辑的属性。通常,每个类只有一个 USER 属性(默认为 false)。例如,QAbstractButton::checked 是(可勾选的)按钮的用户可编辑属性。请注意,QItemDelegate 可以获取和设置小部件的 USER 属性。
  • BINDABLE bindableProperty 属性指示该属性支持绑定,并且可以通过元对象系统 (QMetaProperty) 设置和检查与该属性的绑定。bindableProperty 命名一个 QBindable 类型的类成员,其中 T 是属性类型。此属性是在 Qt 6.0 中引入的。
  • CONSTANT 属性的存在表示该属性值为常量。对于给定的对象实例,常量属性的 READ 方法每次调用时必须返回相同的值。对于不同的对象实例,此常量值可能不同。常量属性不能具有 WRITE 方法或 NOTIFY 信号。
  • FINAL 属性的存在表示该属性不会被派生类覆盖。在某些情况下,这可以用于性能优化,但 moc 并不强制执行。必须注意切勿覆盖 FINAL 属性。
  • REQUIRED 属性的存在表示该属性应由类的用户设置。moc 并不强制执行此操作,并且主要用于适用于暴露给 QML 的类。在 QML 中,除非设置了所有必需属性,否则无法实例化具有必需属性的类。

相关文章:

简单介绍Qt的属性子系统

深入理解Qt的属性系统 ​ 笔者最近正在大规模的开发Qt的项目和工程&#xff0c;这里笔者需要指出的是&#xff0c;这个玩意在最常规的Qt开发中是相对比较少用的&#xff0c;笔者也只是在Qt的QPropertyAnimation需要动画感知笔者设置的一个属性的时候方才知道这个东西的。因此&…...

【PmHub后端篇】PmHub中基于自定义注解和AOP的服务接口鉴权与内部认证实现

1 引言 在现代软件开发中&#xff0c;尤其是在微服务架构下&#xff0c;服务接口的鉴权和内部认证是保障系统安全的重要环节。本文将详细介绍PmHub中如何利用自定义注解和AOP&#xff08;面向切面编程&#xff09;实现服务接口的鉴权和内部认证&#xff0c;所涉及的技术知识点…...

消息~组件(群聊类型)ConcurrentHashMap发送

为什么选择ConcurrentHashMap&#xff1f; 在开发聊天应用时&#xff0c;我们需要存储和管理大量的聊天消息数据&#xff0c;这些数据会被多个线程频繁访问和修改。比如&#xff0c;当多个用户同时发送消息时&#xff0c;服务端需要同时处理这些消息的存储和查询。如果用普通的…...

掌控随心 - 服务网格的流量管理艺术 (Istio 实例)

掌控随心 - 服务网格的流量管理艺术 (Istio 实例) 想象一下,没有服务网格的时候,我们要实现像“将 1% 的用户流量导入到新版本应用”、“根据用户设备类型访问不同后端”、“模拟下游服务故障”这类高级流量策略,通常需要在代码、负载均衡器、API 网关等多个地方进行复杂且分…...

Github 2025-05-13 Python开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2025-05-13统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目10TypeScript项目1 ComfyUI&#xff1a;强大而模块化的稳定扩散GUI 创建周期&#xff1a;399 天开…...

Spring Boot 自动装配原理详解

Spring Boot 的自动装配&#xff08;Auto-Configuration&#xff09;是其核心特性之一&#xff0c;它极大地简化了 Spring 应用的配置过程。通过自动装配&#xff0c;Spring Boot 能够根据项目中的依赖&#xff08;例如&#xff0c;添加了 Spring Data JPA 依赖后自动配置数据库…...

Python核心数据类型全解析:字符串、列表、元组、字典与集合

导读&#xff1a; Python 是一门功能强大且灵活的编程语言&#xff0c;而其核心数据类型是构建高效程序的基础。本文深入剖析了 Python 的五大核心数据类型——字符串、列表、元组、字典和集合&#xff0c;结合实际应用场景与最佳实践&#xff0c;帮助读者全面掌握这些数据类型…...

索尼(sony)摄像机格式化后mp4的恢复方法

索尼(sony)的Alpha 7 Ⅳ系列绝对称的上是索尼的“全画幅标杆机型”&#xff0c;A7M4配备了3300万像素的CMOS&#xff0c;以及全新研发的全画幅背照式Exmor R™CMOS影像传感器&#xff0c;搭载BIONZ XR™影像处理器&#xff0c;与旗舰微单™Alpha 1如出一辙。下面我们来看看A7M4…...

Kubernetes容器运行时:Containerd vs Docker

Containerd 和 Docker 是容器技术领域的两个核心组件&#xff0c;它们在功能定位、架构设计、性能特点及适用场景上有显著差异。以下是两者的详细对比分析&#xff1a; 一、定位与功能 特性DockerContainerd核心定位完整的容器平台&#xff0c;包含构建、运行、编排等全生命周…...

免费专业级 PDF 处理!SolidPDF OCR 识别 + 精准转换批量处理

各位办公小能手们&#xff01;今天咱来聊聊一款超牛的软件——SolidConverterPDF。这可是个专业的多功能PDF处理工具&#xff0c;啥格式转换、文档编辑、扫描识别&#xff0c;它都能搞定&#xff01;下面我就给大伙详细唠唠它的厉害之处。 先说说它的核心功能。 一是PDF格式转换…...

电子电器架构 --- 区域计算架构(Zonal Compute)备战下一代电子电气架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

API的学习总结(上)

在 Java 中&#xff0c;API 指的是 Java 提供的一系列类、接口、方法和工具&#xff0c;用于开发 Java 应用程序。Java API 是 Java 平台的核心组成部分&#xff0c;它提供了丰富的功能&#xff0c;包括基础数据类型、集合框架、输入输出、网络编程、多线程、数据库连接等。 核…...

Spring Boot之Web服务器的启动流程分析

如何判断创建哪种web容器&#xff1a;servlet&#xff1f;reactive&#xff1f; 我们在启动Spring Boot程序的时候&#xff0c;会使用SpringApplication.run方法来启动&#xff0c;在启动流程中首先要判断的就是需要启动什么类型的服务器&#xff0c;是servlet&#xff1f;或者…...

代码随想录算法训练营第六十三天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I

每日被新算法方式轰炸的一天&#xff0c;今天是dijkstra&#xff08;堆优化版&#xff09;以及Bellman_ford &#xff0c;尝试理解中&#xff0c;属于是只能照着代码大概说一下在干嘛。 47. 参加科学大会 https://kamacoder.com/problempage.php?pid1047 dijkstra&#xff08…...

RAG之大规模解析 PDF 文档全流程实战

PDF 文档在商业、学术和政府领域无处不在,蕴含着大量宝贵信息。然而,从 PDF 中提取结构化数据却面临着独特的挑战,尤其是在处理数千甚至数百万个文档时。本指南探讨了大规模解析 PDF 的策略和工具。 PDF解析挑战 PDF 的设计初衷是为了提供一致的视觉呈现,而非数据提取。这…...

uart16550详细说明

一、介绍 uart16550 ip core异步串行通信IP连接高性能的微控制器总线AXI,并为异步串行通信提供了 控制接口。软核设计连接了axilite接口。 二、特性 1.axilite接口用于寄存器访问和数据传输 2.16650串口和16450串口的软件和硬件寄存器都是兼容的 3.默认的core配置参数&#xf…...

Docker 环境安装(2025最新版)

Docker在主流的操作系统和云平台上都可以使用&#xff0c;包括Linux操作 系统&#xff08;如Ubuntu、 Debian、Rocky、Redhat等&#xff09;、MacOS操作系统和 Windows操作系统&#xff0c;以及AWS等云平 台。 Docker官网&#xff1a; https://docs.docker.com/ 配置宿主机网…...

Comparator不满足自反性错误,Comparison method violates its general contract

APP运行退出&#xff0c;跟踪信息 java.lang.IllegalArgumentException: Comparison method violates its general contract! Collections.sort(idxsList);//按score升序排列 查看idxs类 public int compareTo(Idxs o) { //重写compareTo方法 return (int) (this.g…...

[Java实战]Spring Boot 3 整合 Apache Shiro(二十一)

[Java实战]Spring Boot 3 整合 Apache Shiro&#xff08;二十一&#xff09; 引言 在复杂的业务系统中&#xff0c;安全控制&#xff08;认证、授权、加密&#xff09;是核心需求。相比于 Spring Security 的重量级设计&#xff0c;Apache Shiro 凭借其简洁的 API 和灵活的扩…...

如何界定合法收集数据?

首席数据官高鹏律师团队 在当今数字化时代&#xff0c;数据的价值日益凸显&#xff0c;而合法收集数据成为了企业、机构以及各类组织必须严守的关键准则。作为律师&#xff0c;深入理解并准确界定合法收集数据的范畴&#xff0c;对于保障各方权益、维护法律秩序至关重要。 一…...

Flask+HTML+Jquery 文件上传下载

HTML 代码&#xff1a; <div id"loadingIndicator" style"display:none;"><div class"spinner"></div> </div> <!-- 请求过程中转圈圈 --> <form action"" method"post" enctype"m…...

MapReduce打包运行

&#xff08;一&#xff09;maven打包 MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff08;例如&#xff1a;jar…...

国产化Word处理控件Spire.Doc教程:如何使用 C# 从 Word 中提取图片

通过编程方式从 Word 文档中提取图片&#xff0c;可以用于自动化文档处理任务。E-iceblue旗下Spire系列产品是国产文档处理领域的优秀产品&#xff0c;支持国产化&#xff0c;帮助企业高效构建文档处理的应用程序。本文将演示如何使用 C# 和 Spire.Doc for .NET 库从 Word 文件…...

07 mysql之DQL

一、什么是DQL DQL 是 SQL 的一部分,专门用于查询数据。核心命令是 SELECT,是最常用的命令,支持: 简单查询条件过滤排序与分页多表连接聚合统计子查询与复杂逻辑二、基础查询语法 SELECT 字段1, 字段2, ... FROM 表名 WHERE 条件表达式 GROUP BY 分组字段 HAVING 分组条件…...

spark-standalone

一、定义&#xff1a;Standalone 模式是一种独立的集群部署模式&#xff0c;自带完整服务&#xff0c;可单独部署到一个集群中&#xff0c;无需依赖任何其他资源管理系统。 二、配置步骤 1.和前面一样拉到hadoop101的/opt/module这个目录里面。 2.压缩 3.重命名为spark-sta…...

运行Spark程序-在shell中运行 --SparkConf 和 SparkContext

SparkConf 类用于配置 Spark 应用程序的各种参数。通过 SparkConf 类&#xff0c;你可以设置应用程序的名称、运行模式&#xff08;如本地模式、集群模式&#xff09;、资源分配&#xff08;如内存、CPU 核心数&#xff09;等。主要作用配置应用程序参数&#xff1a;可以设置 S…...

分割任务 - 数据增强

语义分割 - FCN &#xff1a; 数据预处理/数据增强 算法源码实例 base_size520 crop_size480 flip_prob0.5if train_val train:self.transforms transforms.Compose([transforms.RandomResize(int(base_size*0.5), int(base_size*2)),transforms.RandomHorizontalFlip(flip_…...

基于C#+MySQL实现(WinForm)企业设备使用信息管理系统

企业设备使用信息管理系统 引言 企业的设备管理在企业的生产制造和管理过程之中意义比较重大&#xff0c;明确企业的设备的产权和维护成本对于企业的成本控制和财务管理之中起到了重要的作用。随着市场竞争的加剧&#xff0c;现代企业所处的市场环境发生了深刻的变革&#xf…...

JavaScript异步编程 Async/Await 使用详解:从原理到最佳实践

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…...

Babylon.js学习之路《四、Babylon.js 中的相机(Camera)与视角控制》

文章目录 1. 引言&#xff1a;为什么相机是 3D 场景的“眼睛”&#xff1f;1.1 相机的核心作用1.2 常见相机类型概览 2. 相机基础参数解析2.1 通用属性2.2 相机坐标系 3. 详解常用相机类型3.1 自由相机&#xff08;FreeCamera&#xff09;3.2 弧形旋转相机&#xff08;ArcRotat…...

MCP Server多节点滚动升级一致性治理

飞书云文档原链接地址&#xff1a;https://ik3te1knhq.feishu.cn/wiki/W8ctwG2sAiPkrXkpl7ocP0g0njf [!TIP] MCP Server 多节点部署时&#xff0c;滚动发布&#xff0c;MCP Client 侧使用的 Client 连接保证使用的是最新的工具配置信息 后续推进&#xff1a;按比例使用旧、新实…...

多线程(二)

今天先来了解一个上一期的遗留概念 —— 前台线程与后台线程 一 . 前台线程与后台线程 大家应该多多少少都听过酒桌文化&#xff0c;咱们平常吃饭&#xff0c;座位次序是没有那么多讲究的&#xff0c;但是在跟领导吃饭&#xff0c;或者出席宴会和一些重要场所的饭局时&#…...

2025年,大模型LLM还有哪些可研究的方向?

近两年LLM在学术界与工业界的发展大家都有目共睹。到了今年&#xff0c;以预训练LLM为代表的大模型PK上半场已然结束&#xff0c;接下来就要进入下半场大模型2.0时代了。 那么在这新赛道&#xff0c;关于大模型我们还有什么可做的创新&#xff1f;要知道&#xff0c;如今的大模…...

VS打断点调试,无法命中断点或断点失效,解决方法

1.打开需要打断点的模块&#xff0c;点击属性&#xff0c;将C/C常规的调试信息格式改为程序数据库&#xff08;/Zi&#xff09; 2.将C/C的优化禁用&#xff08;/Od&#xff09; 3.将链接器中的生成调试信息改为生成调试信息&#xff08;/DEBUG&#xff09; 注&#xff1a;如果需…...

ELF文件详解

ELF 文件不仅仅是一个格式&#xff0c;它是 Linux 世界中程序的"灵魂容器"&#xff0c;承载着程序从编译到执行的整个生命周期。 今天咱们来聊一个看起来高深&#xff0c;实际上理解起来其实挺简单的话题—— ELF 文件。 不知道你有没有想过&#xff1a;我们敲下./…...

【学习笔记】Shell编程---流程控制语句

最近学了好多个流程控制语句&#xff0c;都有点混乱了&#xff0c;赶紧先把各种用法记录下来&#xff01; if 语句 语法格式&#xff1a; if 条件测试命令串 then 条件为真时执行的命令 else 条件为假时执行的命令 fi 以关键字if开头&#xff0c;后跟条件测试表达式&…...

TensorFlow 常见使用场景及开源项目实例

TensorFlow 常见使用场景及开源项目实例 摘要 本文详细介绍了 TensorFlow 在多个领域的典型应用及其对应的开源项目案例。涵盖了图像处理、自然语言处理、语音音频处理、推荐系统与时间序列预测、移动端与边缘计算以及生成式模型与创意应用等多方面内容&#xff0c;列举了大量…...

王炸组合!STL-VMD二次分解 + Informer-LSTM 并行预测模型

往期精彩内容&#xff1a; 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门&#xff01;锂电池剩余寿命预测&#xff08;Python&#xff09;-CSDN博客 超强预测模型&#xff1a;二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;BiLSTM-Attention预测模型…...

OpenCV进阶操作:风格迁移以及DNN模块解析

文章目录 前言一、风格迁移1、风格迁移是什么&#xff1f;2、步骤1&#xff09;训练2&#xff09;迁移 二、DNN模块1、什么是DNN模块2、DNN模块特点3、流程图4、图像预处理功能 三、案例实现1、数据预处理2、加载模型 总结 前言 风格迁移&#xff08;Style Transfer&#xff0…...

使用bitNet架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、配置二、报错总结 前言 大型语言模型&#xff08;LLM&#xff09;面临的挑战&#xff1a;高能耗、高内存需求、部署门槛高。 微软提出 BitNet 架构&#x…...

OpenCV中的光流估计方法详解

文章目录 一、引言二、核心算法原理1. 光流法基本概念2. 算法实现步骤 三、代码实现详解1. 初始化设置2. 特征点检测3. 光流计算与轨迹绘制 四、实际应用效果五、优化方向六、结语 一、引言 在计算机视觉领域&#xff0c;运动目标跟踪是一个重要的研究方向&#xff0c;广泛应用…...

Java集合框架详解与使用场景示例

Java集合框架是Java标准库中一组用于存储和操作数据的接口和类。它提供了多种数据结构&#xff0c;每种数据结构都有其特定的用途和性能特点。在本文中&#xff0c;我们将详细介绍Java集合框架的主要组成部分&#xff1a;List、Set和Queue&#xff0c;并通过代码示例展示它们的…...

多模态融合【十九】——MRFS: Mutually Reinforcing Image Fusion and Segmentation

目录 一.摘要 二.Introduction 三. 背景与动机 四.方法 4.1. 概述 4.2. IGM-Att模块 4.3. PC-Att模块 4.4. 任务头 五.实验 5.1. 数据集与实现细节 5.2. 语义分割 5.3. 图像融合 5.4. 消融研究 5.5. IGM-Att和PC-Att的应用增益 5.6. 复杂度讨论 5.7. 目标检测的…...

音频转文字-在线工具包及使用记录

资料来源&#xff1a;https://zhuanlan.zhihu.com/p/269603431&#xff08;多种方案&#xff09; 视频教程&#xff1a;https://www.youtube.com/watch?vL1H5ov4WTBg https://github.com/openai/whisper // 创建虚拟环境 python -m venv myvnev// 激活虚拟环境 source myvne…...

集合-进阶

Collection collection的遍历方式 迭代器遍历 不依赖索引 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class mycollection {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> co…...

【阿里云】阿里云 Ubuntu 服务器无法更新 systemd(Operation not permitted)的解决方法

零、前言 目前正在使用的Ubuntu服务器中&#xff0c;仅阿里云&#xff08;不止一台&#xff09;出现了这个问题&#xff0c;因此我判定是阿里云服务器独有的问题。如果你的服务器提供商不是阿里云&#xff0c;那么这篇文章可能对你没有帮助。 如果已经因为升级错误导致依赖冲突…...

wpf DataGrid 行选择 命令绑定

在WPF中实现DataGrid行选择与命令绑定的MVVM模式,可通过以下方式结合代码示例实现: 1. ‌基础绑定与命令触发(SelectionChanged事件绑定)‌ 通过Interaction.Triggers捕获SelectionChanged事件,并绑定到ViewModel中的命令: <DataGrid ItemsSource="{Binding I…...

【认知思维】验证性偏差:认知陷阱的识别与克服

什么是验证性偏差 验证性偏差&#xff08;Confirmation Bias&#xff09;是人类认知中最普遍、最根深蒂固的心理现象之一&#xff0c;指的是人们倾向于寻找、解释、偏爱和回忆那些能够确认自己已有信念或假设的信息&#xff0c;同时忽视或贬低与之相矛盾的证据。这种认知偏差影…...

大容量存储的高性能 T-BOX 方案对智能网联汽车的支撑

在智能网联汽车快速发展的当下&#xff0c;车载 T-BOX&#xff08;Telematics Box&#xff09;作为车辆与云端互联的核心枢纽&#xff0c;其性能和可靠性直接决定了用户体验的上限。米客方德&#xff08;MK&#xff09;推出的基于 STM32H7RX 主控芯片与 MKDV4GIL-AST&#xff0…...

Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析

Linux 内核的网络协议栈是一个复杂而高效的体系,涉及多层次的协议处理与数据流转。本文通过分析核心数据结构(如 inetsw 数组、sock_type 枚举)和关键函数(如 inet_add_protocol),深入探讨其工作原理与设计哲学。 一、Socket 类型与 sock_type 枚举 1.1 Socket 类型的定…...