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

news2024/11/15 10:10:09

声明:该专栏为本人学习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.coloradmin.cn/o/1535081.html

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

相关文章

odoo扩展导出pdf功能

1. 说明: odoo原生导出功能扩展导出pdf文件功能, 如有额外需求请联系博主 2. 版本说明: odoo版本: odoo15 其他odoo版本未进行测试,如有需要自行测试 3. 地址: 该补丁代码放在github仓库, 地址: https://github.com/YSL-Alpaca/odoo_export_pdf 4. 改补丁依赖于第三方软件wkh…

数学建模(灰色关联度 python代码 案例)

目录 介绍: 模板: 案例:哪些原因影响结婚率 数据标准化: 灰色关联度系数: 完整代码: 结果: 介绍: 灰色关联度是一种多指标综合评价方法,用于分析和评价不同指标之…

【MySQL】对表的相关操作(DDL)

👦个人主页:Weraphael ✍🏻作者简介:目前学习计网、mysql和算法 ✈️专栏:MySQL学习 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

软件杯 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 优质竞赛项目系列,今天…

AI助力生产制造质检,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建工业生产制造场景下的瓷砖瑕疵检测识别分析系统

瓷砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光,最后进行质量检测和包装。得益于产业自动化的发展,目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说,一条产线需要配数名质检工&…

塔楼VR火灾逃生应急安全教育突破了传统模式

城镇化的高速发展,给消防安全带来了严峻的挑战,尤其是人员密集的办公场所,如何预防火灾发生,学习火灾成因,减少火灾发生避免不必要的损失,成为安全应急科普的重中之重。 通过模拟真实的办公场所火灾场景&am…

JVM监控工具

JVM监控工具 jps 查看系统中运行的java进程id PS D:\practise\test> jps 22672 Jps 13688 RemoteMavenServer36 1068 14188 TestApplication PS D:\practise\test> jmap 用来查看进行内存信息,实例个数以及占用内存大小 jmap -histo 进程id PS D:\prac…

Python使用PaddleSpeech实现语音识别(ASR)、语音合成(TTS)

目录 安装 语音识别 补全标点 语音合成 参考 PaddleSpeech是百度飞桨开发的语音工具 安装 注意,PaddleSpeech不支持过高版本的Python,因为在高版本的Python中,飞桨不再提供paddle.fluid API。这里面我用的是Python3.7 需要通过3个pip…

华为北向网管NCE开发教程(5)打包org.omg.CosNotification找不到

1问题描述 在IDE中,代码能正常运行,但是打包的时候,会抱不到一些类 2问题原因 导入的本地包中,能在IDE中找到,但是在使用maven打包时,maven找不到这些依赖包 3解决办法 将依赖包通过maven安装到maven…

基于python+vue灾害应急救援平台flask-django-php-nodejs

灾害应急救援平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来,…

python银行柜台管理系统flask-django-php-nodejs

相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低银行的运营人员成本,实现了银行柜台的标准化、制度化、程序化的管理,有效地防止了银行柜台的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询…

Linux:Prometheus+Grafana+睿象云告警平台(3)

在上一章我进行了Prometheus和Grafana的基础搭建以及部署 Linux:Prometheus的源码包安装及操作(2)-CSDN博客https://blog.csdn.net/w14768855/article/details/136855988?spm1001.2014.3001.5501 1.注册 在监控中必不可少的就是监控告警&am…

螺旋卫星通信天线设计与有限元分析matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 卫星搭载用于通讯的螺旋型天线,卫星尺寸: 10cm*10cm*30cm;天线类型:螺旋;天线UHF(约1GHz – 3GHz&#…

【精彩回顾】百度智能云千帆产品3月21日发布会

3月21日,AI Cloud Day:百度智能云千帆产品发布会在北京举办。会议聚焦百度智能云千帆大模型平台最新进展,分享思考与实践。百度智能云在发布会期间宣布: >>满足企业“效价比”核心诉求,千帆ModelBuilder大模型服…

clickhouse sql使用

1、arrayMap(fun1,arr1)使用 第一个参数是一个 lambda 函数,第二个参数是一个集合 eg、select arrayMap(x->x1,[1,2,3]) 对集合中每个数1 2、arrayJoin(arr1) 将集合由行转列 eg、 select arrayJoin([1,2,3]) eg、select arrayJoin(arrayMap(x->x1,[1,2,3])) …

学工系统0day挖掘-危害拉满

前言: 21年的挖的漏洞了 漏洞均已提交且均已修复,这里文章只做技术交流 正文: 漏洞挖掘过程: 起因是这样的 20年简单挖了一下这个学校,但是没把shell拿了 后面随着学习21年又回来看了看这个系统,果然发觉了很多新的东西,脱敏了就写文章下。 漏洞1:未授权批量挖掘:…

【C++】---string的模拟

【C】---string的模拟 一、string类实现1.string类的构造函数2.swap()函数3.拷贝构造函数4.赋值运算符重载5.析构6.迭代器7.operator[ ]8.size9.c_str()10.reserve()11.resize()12.p…

BetterDisplay Pro:让屏幕管理更高效、更便捷

BetterDisplay Pro是一款功能强大的显示器管理软件,适用于Windows和Mac操作系统。其主要功能包括显示器校准、自动校准、多种预设模式、手动校准以及可视化数据等。 具体而言,这款软件可以根据用户的需求和环境条件调整显示器的颜色、亮度和对比度等参数…

Java项目:68 ssm0校园美食交流系统+vue

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 主要功能包括管理员:首页、个人中心、美食分类管理、美食信息管理、用户管理、管理员管理、论坛中心、系统管理。 前台首页:首…

【SpringBoot】登录校验之会话技术、统一拦截技术

真正的登录功能应该是: 登陆后才能访问后端系统页面,不登陆则跳转登陆页面进行登陆。 当我们没有设置登录校验,可以直接通过修改地址栏直接进入管理系统内部,跳过登录页。而后端系统的增删改查功能,没有添加判断用户是…