【QT入门】 Qt槽函数五种常用写法介绍

声明:该专栏为本人学习Qt知识点时候的笔记汇总,希望能给初学的朋友们一点帮助(加油!)


往期回顾:

【QT入门】实现一个简单的图片查看软件-CSDN博客

【QT入门】图片查看软件(优化)-CSDN博客

【QT入门】 lambda表达式(函数)详解-CSDN博客

 【QT入门】 Qt槽函数五种常用写法介绍

一、信号槽基本概念

Qt的信号槽是一种用于处理事件和通信的机制,是Qt框架中的一个重要特性。信号槽机制使得对象之间可以进行异步通信,无需显式调用对方的方法,从而实现了对象之间的解耦和灵活的交互。

1、信号(Signal):

信号是一种特殊的成员函数,用于通知其他对象发生了某个事件或状态的改变。信号在类中声明为signals关键字,并不包含实际的实现代码。信号可以带有参数,用于传递额外的信息给槽函数。

2、槽(Slot):

槽是用于响应信号的成员函数,可以执行相应的操作或处理逻辑。槽在类中声明为slots关键字,并实现具体的逻辑,槽函数的参数列表必须与信号的参数列表一致,或者可以接受更多参数。 

通过connect函数将信号与槽连接起来,使得当信号被发射时,相关的槽函数会被调用。
连接可以是一对多的关系,即一个信号可以连接多个槽函数,也可以是多对一的关系,即多个信号可以连接到同一个槽函数。我们来看看其四个参数

connect(1.信号的发送者、2.发送的信号(函数的地址)、3.信号的接收者、4.接收后信号的处理(槽函数)的地址)

3、示例:

connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::btnslot); 

一一对应, ui里的pushButton控件时信号的发送者,发送了一个cliced点击信号,当前主窗口接收了这个信号,接收后调用当前窗口的btnslot方法,也就是所说的槽函数,进行了响应。

4、第五个参数 

当然,实际上Qt的connect是五个参数,还有最后一个参数用于指定信号槽连接类型,但是我们一半不写,因为默认是自动连接类型。我们看看第五个参数类型:

AutoConnection自动连接,Qt会根据信号发送者和接收者的线程自动选择连接类型。
DirectConnection直接连接,信号发送时,槽函数会立即在发送者所在的线程中执行。
QueuedConnection队列连接,信号发送时,槽函数会被投递到接收者所在的线程的事件队列中,在接收者线程空闲时执行。
BlockingQueuedConnection阻塞队列连接,与QueuedConnection类似,但发送者会等待槽函数执行完成后才继续执行。
UniqueConnection唯一连接,确保相同的信号和槽不会被重复连接。

在Qt中使用这些连接类型来控制信号槽的行为,以确保在多线程环境下正确地处理信号和槽的执行顺序和线程关系。

二、五种槽函数写法

1、第一种: Qt4写法

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(btnslot()))

现在呢已经不推荐这种写法,因为如果SIGNAL写错了,或者信号名字、槽函数名字写错了,
编译器检查不出来,导致程序无响应,引起不必要的误解,也不便于找到问题。

2、第二种: Qt5写法

connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::btnslot);

推荐使用这种写法,信号名字、槽函数名字写错了,编译器会直接报错。

3、第三种:lambda表达式写法

connect(ui->pushButton,&QPushButton::clicked,[=](参数){
   //具体代码
   QMessageBox::information(this,"title","Qt5_signal_slot");
   }); 

推荐使用,适用于slot代码比较少的逻辑

注:槽函数里写参数,可以比实际的参数数量少,比如实际有一个形参,我们就可以不写,可以写那一个,但是不可以写两个 。

4、第四种:牵线法

这种方法就是在ui控件上,点击控件绑定一个槽函数,然后再自己写槽函数逻辑,但是看着比较混乱,不太推荐。

 5、第五种:自动生成法

在ui设计界面里直接点击控件,选择转到槽,再在里面选择槽函数。(通过这个方式,还可以很直观的看到某个控件有哪些槽函数)

而且这个方法用的挺多的,很方便,同时也可以选择自己手写,命名是on_控件名_信号名;分别在.h声明和.cpp实现就是,如果是自定义的槽函数一般都是do开头

比如我对ui界面的一个pushbutton控件绑定槽函数

void MainWindow::on_pushButton_clicked()
{
    QMessageBox::information(this,"title","Qt5_signal");
    close();
}

以上就是Qt槽函数五种常用写法介绍。


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章教会你如何用 Axure 画原型图

原型图对于做出更好的 UI 设计决策非常重要。然而,选择合适的原型工具并不容易。我们需要仔细考虑成本、功能、与其他设计工具的集成、学习曲线、协作功能和用户测试方法,本文将分析 Axure 的原型设计工具。 1、为何使用 Axure 绘制原型图? …

绝了!这个国标证书的含金量怎么又提高了?!

在项目管理领域,很多人只知道PMP证书,但却不知CSPM认证体系同样正在逐步深入该领域,其价值和影响力让人难以忽视。 一、“CSPM”正式成为注册商标 上周,项目管理标准化官方发布推文,祝贺"CSPM"正式成为项目…

MQTT和Modbus的物联网网关协议区别分析

MQTT和Modbus的物联网网关协议区别分析 MQTT(Message Queuing Telemetry Transport)与Modbus是两种广泛应用在物联网环境中的通信协议,它们各自具有独特的优势和适用场景,下面将从多个维度对这两种网关协议进行详细区别分析。 首…

【MySQL】DDL的表操作详解:创建&查询&修改&删除(记得3点加上连接)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

如何使用Net2FTP+cpolar搭建专属文件共享站点并实现无公网IP远程访问——“cpolar内网穿透”

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

MySQL 索引的10 个核心要点

文章目录 🍉1. 索引底层采用什么数据结构?为什么不用hash🍉2. B树与B树区别?为何用B树?🍉3. 自增主键理解?🍉4. 为什么自增主键不连续🍉5. Innodb为什么推荐用自增ID&…

Nebula Graph-02-NebulaGraph高阶配置、用户管理、日志

前言: 在上篇中我们已经成功的部署了Nebula Graph 服务:Nebula Graph-01-Nebula Graph简介和安装以及客户端连接, 现在我们来谈一下Nebula Graph 的各项配置 NebulaGraph高阶配置 文件 在上篇文章中,我们成功的启动了NebulaGraph 服务&am…

【C++】1311. 分跳绳

问题:1311. 分跳绳 类型:基本运算、整数运算 题目描述: 学校新买来 m 根跳绳,每个班分 n 根,最多可以分给几个班的同学,还剩多少根?(m≥n)。 输入: 两个整…

camunda流程引擎事务管理和乐观锁

本文重点介绍camunda开源流程引擎的事务配置,以及在高并发多线程情况下,可能会发生多个线程尝试对相同流程实例数据进行更改的情况,Camunda如何通过数据库的乐观锁解决这种并发冲突的,并介绍了乐观锁和悲观锁的适用场景、性能影响…

【C语言】数9的个数

编写程序数一下 1到 100 的所有整数中出现多少个数字9 1,首先产生1~100的数字。然猴设法得到数9个数,例如个位:19%109,十位:91/109。 2,每次得到数九的时候,就用一个变量来进行计数。 代码如…

【项目笔记】java微服务:黑马头条(day04)

文章目录 自媒体文章-自动审核1)自媒体文章自动审核流程2)内容安全第三方接口2.1)概述2.2)准备工作2.3)文本内容审核接口2.4)图片审核接口2.5)项目集成 3)app端文章保存接口3.1)表结构说明3.2)分布式id3.3)思路分析3.4)feign接口 4)自媒体文章自动审核功能实现4.1)表结构说明4.…

搭建ELK+minio及配置

什么是ELK ELK是一种基于开源工具的日志管理和数据分析解决方案,它由三个核心组件组成: Elasticsearch:用于存储、搜索和分析大规模数据的分布式搜索引擎。Logstash:用于收集、过滤、转换和发送日志数据的数据处理管道。Kibana&…

mysql虚拟列Generated Column

目录​​​​​​​ 1、Generated Column简介 生成的列定义具有以下语法: 2、实践 2.1 存储格式为json字段增加索引 2.2 手机号后四位 3、虚拟列索引介绍 3.1 虚拟列索引的限制 3.1.1 Virtal Generated Column 4、阿里云数据库环境是否支持 下期扩展&…

通过 Socket 手动实现 HTTP 协议

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

使用Oxygen编辑器的项目来做团队协作

▲ 搜索“大龙谈智能内容”关注公众号▲ 扫码见我视频号上的视频 今天,分享一种在Oxygen中使用项目文件进行团队协作的高效方法。这种方法不仅能帮助我们轻松共享文件和文件夹,还能确保团队成员使用统一的项目级别选项和发布配置,从而提高工…

【Git】第二课:git安装和配置

安装 我们伟大祖国有句古话叫巧妇难为无米之炊,还有句话叫工欲善其事必先利其器。所以,在正式的学习之前,我们需要先把git这把利器安装好。 Windows系统 下载安装包 打开Git - Downloading Package页面,根据系统类型32位还是6…

有ai写文案的工具吗?分享5款好用的工具!

在数字化时代,人工智能(AI)已渗透到我们生活的方方面面,包括内容创作领域。AI写文案的软件以其高效、便捷的特点,正逐渐受到广大内容创作者、营销人员、甚至普通用户的青睐。本文将为您盘点几款热门的AI写文案软件&…

Flume入门概述及安装部署

目录 一、Flume概述1.1 Flume定义1.2 Flume基础架构 二、Flume安装部署 一、Flume概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。 1.2 Flume基础…

粒子群算法 - 目标函数最优解计算

粒子群算法概念 粒子群算法 (particle swarm optimization,PSO) 由 Kennedy 和 Eberhart 在 1995 年提出,该算法模拟鸟群觅食的方法进行寻找最优解。基本思想:人们发现,鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…

windows查看局域网内所有已使用的IP IP扫描工具 扫描网段下所有的IP Windows环境下

推荐使用: Advanced IP Scanner 官网下载: https://www.advanced-ip-scanner.com/
最新文章