Qt-信号和槽

一.信号和槽概念

1. 信号(Signal)

  • 概念
    信号是 Qt 对象在状态发生变化事件发生时自动发出的通知。
    比如按钮被点击、文本框内容变化、定时器超时等,都会发出相应信号。

  • 本质

    • 它只是一个函数声明(没有函数体),由 Qt 的 moc 工具生成底层实现。

    • 发出信号时,不关心有没有槽接收,也不关心槽的实现细节。

    • 信号可以携带参数,将数据一并传递给槽。

信号本质就是函数,可以分为两类。

1.内置信号,就是系统提供的信号,Qt 各种控件已经在类内部声明并实现的信号eg.&QPushButton::clicked  直接使用就可以。

2.自定义信号只需要在.h文件中进行声明就可以,不需要定义实现。

如何才能触发出自定义的信号呢?

emit valueChanged(); 当然不写emit也行,不过最好还是写上表示发送自定义信号。

2. 槽(Slot)

  • 概念
    槽是一个可以被信号调用的普通成员函数,用于处理信号传递过来的事件或数据。

  • 本质

    • 槽函数和普通成员函数没有区别,只是通过 connect() 机制与信号关联后,会在信号触发时被自动调用。

    • 槽函数可以有参数,也可以没有,参数类型和顺序需要与信号保持一致(或是信号的参数可以转换为槽的参数类型)。

槽就相当于一个回调函数,发送了某个信号调用对于应的槽函数进行处理。

槽函数需要在.h文件中声明,并在.cpp文件中实现定义(处理信号的逻辑)

信号和槽的参数关系

信号和槽函数都可以有参数。信号和对应连接的槽函数有规则
1.信号函数的参数数量<=槽函数的参数

槽函数可以少接收一些参数,但不能多于信号提供的参数。多出来的信号参数会被自动丢弃

2.信号函数的参数能和惨函数参数类型相同或者能隐式类型转换

二.connect()函数

那怎么把信号和槽关联起来呢?

connect() 用于建立信号和槽之间的连接,让某个信号触发时自动调用对应的槽函数。

static QMetaObject::Connection connect(const QObject *sender,const char *signal,const QObject *receiver,const char *method,Qt::ConnectionType type = Qt::AutoConnection
);
  • sender:信号发出者

  • signal:信号(函数指针或 SIGNAL 宏)

  • receiver:槽接收者

  • slot:槽(函数指针或 SLOT 宏)

  • type:连接类型(Qt::AutoConnection 默认)

eg.
connect(myButton,&QPushButton::clicked,this,&My_MainWindow::myhandle);

1.myButton  信号从哪一个控件发出的

2.&QPushButton::clicked  哪一个信号函数

3.this(当前窗口对象)  谁接收信号

4.&My_MainWindow::myhandle  对应关联的槽函数

三.信号和槽基本用法

1. 创建一个控件(信号的发起者)

有两种方式:

        1.代码创建

这种方式创建的是局部变量(作用域在构造函数里)。

也可以在 .h 头文件里提前声明为成员变量,这样生命周期和类对象一致

        2.图形化界面创建

在 .ui 文件中直接拖拽控件到窗体上,保存后编译会自动生成对应的对象(在 ui_*.h 里)

2. 信号

信号有两种来源:

  1. 内置信号:Qt 控件自带的,比如 QPushButton::clicked()

  2. 自定义信号

    • 在类的 signals: 区域声明(不需要实现),

    • 使用 emit 发射。

3.声明并定义槽函数

1.代码生成的,手动.h声明 .cpp定义槽函数

2.如果是通过图形化界面生成的控件就可以对控件 右键 选择信号名称,​​​​​Qt 会自动在 .h 里声明并在 .cpp 里定义槽函数。

4. 连接(connect)信号和槽

1.通过代码生成的控件需要手动连接

2.通过图形化界面生成的控件自动连接 不需要显示连接

注意:如果自己再手动连接一次,就会变成重复连接,导致一次信号触发两次槽函数

5. 断开连接(disconnect)

  • 必须用与连接时相同的方式来断开:

    • 如果是函数指针连接,就用函数指针断开:

    • 如果是宏方式连接(UI 自动生成的槽),需要用宏方式断开。

  • 如果要断开所有槽,可以把槽参数设为 nullptr

    disconnect(ui->pushButton, nullptr, this, nullptr);
    

    这两个nullptr分别代表,所有的信号对所有的槽函数都进行断开

使用 Lambda 表达式定义槽函数

在 Qt 中,槽函数不仅可以是类成员函数,还可以直接使用 lambda 表达式
Lambda 表达式的本质是一个匿名函数,特别适合一次性使用的回调场景,比如临时响应某个信号,不想单独写一个成员函数时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92612.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP学习开始-02逻辑回归

逻辑回归什么是逻辑回归逻辑回归的应用场景逻辑回归几个重要概念Sigmoid 函数损失函数构建逻辑回归模型的步骤举个例子参数解释模型优化什么是逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的统计学习方法&#xff0c;尽管名字中带有…

【运维进阶】LAMPLNMP 最佳实践

LAMP/LNMP 最佳实践 LAMP/LNMP 组件 LAMP&#xff1a;LinuxApacheMysql/MariadbPHP/Python/Perl。 LNMP&#xff1a;LinuxNginxMysql/MariadbPHP/Python/Perl。 Linux&#xff1a;操作系统&#xff0c;提供程序运行基础。Apache/Nginx&#xff1a;Web 服务器&#xff0c;提供网…

深入解析 resolv.conf 文件:DNS 配置的核心

/etc/resolv.conf 文件是 Linux 和类 Unix 系统中 DNS 配置的核心组件。它决定了系统如何将域名解析为 IP 地址&#xff0c;这是网络通信的关键环节。本文将深入探讨 resolv.conf 文件的核心内容&#xff0c;重点讲解 nameserver 指令以及 options 配置中的 attempts 和 rotate…

【LeetCode】102 - 二叉树的层序遍历

题目描述 给你二叉树的根节点 root&#xff0c;返回其节点值的层序遍历&#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 解题思路 使用 BFS&#xff08;广度优先搜索&#xff09;的思想&#xff0c;维护当前层的所有节点&#xff0c;逐层处理&#xff1a;…

计算机网络1-5:计算机网络的性能指标

目录 常用性能指标 速率 带宽 吞吐量 时延 时延带宽积 ​往返时间 ​利用率 ​丢包率 常用性能指标 性能指标可以从不同的方面来度量计算机网络的性能 常用的计算机网络的性能指标有8个:速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率 速率 比特…

TDengine IDMP 文档介绍

TDengine IDMP (Industrial Data Management Platform) 是一款 AI 原生的物联网、工业数据管理平台。它通过经典的树状层次结构组织传感器、设备采集的数据&#xff0c;建立数据目录&#xff0c;对数据提供语境化、标准化的处理、并提供实时分析、可视化、事件管理与报警等功能…

使用 iFLOW-CLI GitHub Action 和 Qwen3-Coder 给 GitHub 仓库生成幻灯片风格的文档站点

阿里的心流 https://www.iflow.cn/ 团队最近开源了一款基于终端的 AI Agent 工具 iFLOW CLI, 目前可以免费使用到强大的 Qwen3-Coder、Kimi K2 等模型。又是一款类似 Anthropics Claude Code 的产品。 iFlow CLI 是一款直接在终端中运行的强大 AI 助手。它能够无缝分析代码仓库…

【2025最新】在 macOS 上构建 Flutter iOS 应用

推荐超级课程&#xff1a; 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 目录软件要求操作系统开发工具文本编辑器或集成开发环境安装 Flutter SDK下载并安装 Flutter将 Flutter 添加到您的PATH配置 i…

MySQL 临时表详细说明

目录 MySQL 临时表详细说明 1. 定义 2. 核心特性 3. 创建与使用 4. 典型应用场景 5. 生命周期管理 6. 注意事项 7. 性能优化建议 MySQL 临时表详细说明 1. 定义 临时表是存储在内存或磁盘上的临时性数据表&#xff0c;仅在当前数据库会话中存在。会话结束时自动销毁&a…

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南 文章类型&#xff1a;性能优化实践指南 技术领域&#xff1a;微服务架构 —— API 网关 文章结构&#xff1a;原理深度解析型 目标读者&#xff1a;有一定微服务与运维基础的后端开发工程师一、技术背景与应用场景 随…

【Spring Boot刷新上下文核心流程详解】

Spring Boot 刷新上下文核心流程详解 一、前言 在使用 Spring Boot 启动应用时&#xff0c;控制台会打印出一大串日志&#xff0c;其中最核心的启动动作之一就是 刷新上下文&#xff08;refresh&#xff09;。 refresh 方法不仅负责 Bean 的创建与初始化&#xff0c;还涉及监…

关于过滤器(Filter)的学习

过滤器&#xff08;Filter&#xff09;概述 过滤器是 Java Servlet 规范的一部分&#xff0c;用于在请求到达 Servlet 之前或响应返回客户端之前拦截请求和响应。它可以用于执行各种任务&#xff0c;如请求预处理、响应后处理、身份验证、日志记录等。 过滤器的作用 预处理请…

Spring AI 打造智能面试人实战

Spring AI人工智能面试机器人相关实例 以下是与Spring AI人工智能面试机器人相关的实用案例,涵盖技术实现、功能设计及常见问题解决方案,按应用场景分类呈现: 技术集成案例 调用Hugging Face模型库处理专业领域问题 通过Spring Security添加面试会话身份验证 结合WebSoc…

QT 程序发布时候调用自定义动态库

1、需要在pro文件中增加下面的内容&#xff1a;QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/lib\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/../lib\"其中lib为动态库的文件夹名称&#xff0c;可以根据自己喜好…

SpringBoot学习日记 Day6:解锁微服务与高效任务处理

一、开篇&#xff1a;从单体到微服务的思维转变刚开始接触微服务时&#xff0c;我总习惯把所有功能写在一个项目里。直到项目越来越臃肿&#xff0c;每次修改都要全量部署&#xff0c;才意识到微服务架构的价值。今天我们就来探索SpringBoot在微服务场景下的强大能力&#xff0…

机械学习--DBSCAN 算法(附实战案例)

DBSCAN 算法详解DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;带噪声的基于密度的空间聚类应用&#xff09;是一种经典的密度聚类算法&#xff0c;由 Martin Ester 等人于 1996 年提出。与 K-means 等基于距离的聚类算法不同&am…

【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808

一、背景 1.1 主要的硬件是&#xff1a;1.2 主要的软件是&#xff1a; RK3588跑操作系统Atlas 200I A2加速模块作为EP模式关键参数版本说明CPU架构aarch64OS版本Ubuntu 22.04.5 LTSkernel版本5.10.198 二、适配 准备固件run包文件&#xff1a;Ascend-hdk-310b-npu-firmware_7.…

如何在 VS Code 中进行 `cherry-pick`

cherry-pick 是 Git 的一个功能&#xff0c;允许你选择某个 commit 并将其应用到当前分支&#xff0c;而无需合并整个分支。在 VS Code 中&#xff0c;你可以通过 内置的 Git 功能 或 终端 来完成 cherry-pick。方法 1&#xff1a;使用 VS Code 的 Git 图形界面&#xff08;GUI…

STM32CubeMX(十三)FatFs文件系统(SPI驱动W25Qxx)

目录 一、知识点 1. 什么是Fatfs文件系统? 2. Fatfs操作系统控制流程 二、实战操作 1.CubeMX配置 2. 配置串口以及SPI 3. 修改功能映射接口 4. 添加测试代码 5. 实验现象 在完成本章之前需要完成一些基础配置,详情查看下面的文章。 STM32CubeMX(二)新建工…

【前端后端部署】将前后端项目部署到云服务器

更多笔记在这里☞ 全栈之路&#xff1a; https://gitee.com/oldbe/notes 【跳转到】 觉得有用请点个 star &#xff0c;非常感谢&#xff01; 现在AI太强大&#xff0c;开发个人产品的门槛和成本太低了&#xff0c;只要你有好的想法都可以很快速的开发一款产品 1.…