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

Qt中槽函数的几种方法 SLOT(pushButton1())`: 接收信号后调用的槽函数,表示调用当前对象的 `pushButton1()` 成员函数。把按钮的objectName,声明为void on_objectName_clicked();第一种已经完成,`ui->pushButton`: 信号发出者,表示界面上的按钮对象。`SIGNAL(clicked(bool))`: 发出的信号,表示按钮被点击。替换为如下代码,然后不需要按前面的操作声明和定义槽函数,直接lambda定义。`this`: 信号接收者,表示当前对象。 阅读详情
AI摘要

本文介绍了Qt中的信号槽机制,包括信号、槽的概念,以及五种常见的槽函数写法,如Qt4/5写法、lambda表达式、牵线法和自动生成法。重点讲解了信号槽的连接类型及其在多线程环境中的应用。,

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


往期回顾:

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

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

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

 【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槽函数五种常用写法介绍。


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

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

Qt槽函数的几种用法 Qt槽函数的几种用法通过ui控件添加槽函数通过connect连接 通过ui控件添加槽函数 这种方法是在Qt的ui文件中,添加一个控件,然后点击右键,选择具体的槽函数,具体操作如下: 新建一个Qt项目(略过) 点击ui文件 添加一个控件(这里添加一个按钮(PushButton)) 右键按钮控件 选择相应的事件(这里选择clicked) 在mainwindow.h和mainwindow.cpp中会自动添加两段代码,如下: 然后就可以在函数中添加相关代码来实现。 通过connect连接 **1、首先介 阅读详情

相关推荐

QT的信号槽的四种写法和五种链接方式

在Qt中,信号(Signal)和槽(Slot)是一种用于对象之间通信的机制,用于实现一种松耦合的方式。信号被发送时,与之相关联的槽会被调用。

clayhell的博客 3045

Qt :信号与槽

QT信号与槽的详细介绍

weixin_57663528的博客 2313

QT+VS开发界面入门(qt界面在VS2022实现自动生成槽函数)

QT+VS开发入门 无论使用QT Creater单独开发,或者使用VS的MFC单独开发,都能通过转到槽函数/双击插件,进行跳转一个插件的响应函数。 而习惯了使用VS编程,又想使用QT进行界面开发,那就很有必要看一下这篇文章。 关于QT与VS如何联动,请看我的另一篇文章:VS+QT开发环境搭建 创建项目 先上项目列表: ui_QtWidgetsApplication1.h:包含了UI界面内的参数属性。界面布局,插件位置,槽函数的连接函数等。 QtWidgetsApplication1.ui:UI界面,双击打

MelyLenient的博客 3万+

QT的信号与槽函数

QT中通过信号(signal)和槽函数(slot)将事件和响应函数连接起来(可以类比MFC中的操作和对应的On开头的响应函数).它的优点在于信号和槽函数是松耦合的关系,你可以通过connect将两者连接起来,也可以通过disconnect将两者断开....

Stephen___Qin的博客 4174

Qt信号与槽机制:五种槽函数写法详解与实战应用

信号与槽是Qt框架实现对象间通信的核心机制,它基于元对象系统提供类型安全的解耦通信方式。其原理是通过moc编译器生成元信息,在运行时或编译时建立信号发射器与槽函数接收器之间的映射关系。这一机制的技术价值在于实现了组件间的松耦合,提升了代码的可维护性和复用性。在GUI开发、多线程通信、事件处理等应用场景中,信号与槽是构建响应式界面的基础。针对不同的编程需求,Qt提供了多种槽函数写法,包括传统的SIGNAL/SLOT宏、现代函数指针、Lambda表达式等,其中Lambda表达式因其简洁性和上下文捕获能力,成为处

weixin_33324197的博客 325

Qt信号槽机制详解:五种槽函数写法对比与实战选型指南

信号与槽是Qt框架实现事件驱动编程的核心机制,它通过元对象系统提供类型安全的对象间通信方式。其原理基于发布-订阅模式,信号在事件发生时被发射,连接的槽函数自动响应,实现了组件间的松耦合。这一机制的技术价值在于提升代码的可维护性和模块化程度,广泛应用于GUI开发、多线程通信和异步任务处理等场景。在工程实践中,槽函数的不同写法直接影响代码性能与可读性,其中函数指针方式提供编译期检查,而Lambda表达式则简化了简单回调。本文聚焦Qt槽函数的五种核心写法,深入解析SLOT宏、函数指针、Lambda表达式、QMet

weixin_29895109的博客 228

【Qt】一篇全面的信号和槽函数机制总结

信号和槽函数机制 文章目录信号和槽函数机制一、信号和槽机制简介二、【信号】(2-1)信号的发出(2-2)信号的处理三、【槽函数】(3-1)带有默认参数的信号和槽函数(3-2)使用```QObject::connect()```将信号连接到槽函数。(3-3)信号和槽函数的一些高级用法四、使用Qt与第三方信号和槽函数 一、信号和槽机制简介 ​ (注:下文中的槽与槽函数表示一个意思) ​ 信号和槽用于多个对象之间的通信。信号和槽机制是Qt的核心特性,也是与其他框架最大的不同之处。Qt的元对象系统是信号和槽实现的基

iriczhao的博客 1万+

从零配置到批量处理:FaceFusion 3.1完整使用指南(含hififace_256模型测试)

本文详细介绍了FaceFusion 3.1的完整使用指南,包括环境配置、模型选择(特别是hififace_256模型的深度测试)以及批量处理技巧。通过AI驱动的脸部替换技术,帮助用户高效实现高质量的面部处理,适用于影视制作、广告设计等多种场景。

weixin_29056865的博客 655

【Qt】自定义信号和槽函数

【Qt】自定义信号和槽函数

Yui_的博客 3639

VisualStudio2022启动报错

把Users\...\AppData\Local\Microsoft\VisualStudio\11.0\ComponentModelCache中的Microsoft.VisualStudio.Default.cache这个文件移除,再重启vs,各项功能都能正常使用了。第一次使用方法1有效果,不知道什么原因后面又报错再删除缓存文件无效了,最后使用方法2启动VS成功。vs2022启动时,报错弹框,在ActivityLog查看具体报错信息,报错原因未知。网上搜索到两种解决方法。方法1:删除缓存文件。

面朝大海,春暖花开 3938

FPGA中参数化SPI接口设计与Verilog实现

SPI(串行外设接口)作为嵌入式系统的核心通信协议,通过全双工、高速率特性在FPGA与Flash、ADC等外设交互中占据重要地位。参数化设计通过抽象时钟极性、数据位宽等可配置维度,采用分层架构实现硬件复用,显著提升开发效率。Verilog实现需重点处理跨时钟域同步和可配置帧结构,结合AXI总线集成与UVM验证方法学,可构建适应工业控制、物联网网关等场景的高可靠SPI解决方案。

ciya3282的博客 1408

Qt:槽函数的五种写法

因为是以宏定义的方式展开,所以如果SIGNAL写错,或者信号名字、槽函数写错、编译器是无法检验出来的,导致出现隐性BUG,不容易发觉修改错误。

Rain_ZZX的博客 1425

【STM32项目】基于STM32设计的震动马达超声波电机高频震动——高级定时器PWM互补输出带死区控制__资料编号3

实现高级定时器互补输出带死区控制,实现震动/超声波电机/马达,高频震动。使用 STM32F103 芯片输出两路互补 PWM,并带有死区和刹车控制功能。定时器 1 通道 1 及其互补通道输出PWM,且带死区控。当定时器 1 的刹车输入引脚被拉高时,产生刹车时间,即定时器 8 停止输出 PWM。当刹车输入引脚被拉高时,通道 1 和通道 2 将从有波形输入状态转换成无效电平状态。

嵌入式阿齐Archie 6742

【六】【QT开发应用】信号和信号槽的五种写法

mainwindow.cpp 复盘 第一种写法 旧的信号和槽机制在 Qt 4 及更早版本中,信号和槽的连接使用的是字符串形式的信号和槽。这种方式通过 SIGNAL 和 SLOT 宏将信号和槽的签名转换为字符串。 在本文中的例子: 信号 (SIGNAL): SIGNAL(clicked()):这里的 clicked() 是 QPushButton 类的一个信号。当按钮被点击时,这个信号会被发射。 SIGNAL 宏将 clicked() 转换为字符串 “2clicked()”。这里的 2 是内部使用的一个标记

m0_74163972的博客 1330

【Unity】NGUI下载与导入

Unity3D插件NGUI的下载和导入。

Get your hands dirty 3万+

以 Cloud 为核心的设备 mTLS 证书体系:从产品需求到 OP-TEE 安全落地

本文探讨了以云端为核心的物联网设备mTLS证书体系构建方案。文章从产品需求出发,分析了云端必须采用mTLS+证书体系管理设备身份的原因,指出静态Token方案的三大缺陷:身份不可控、运营不可控和审计不可控。重点阐述了mTLS在产品中的核心功能是加密传输和双向认证,并详细列出了云端PKI、设备注册中心等必备组件。在设备侧,强调必须通过OP-TEE技术保护私钥安全,提出了一个包含密钥生成、CSR导出等功能的TA设计方案。最后,文章给出了云端端到端流程示例,说明如何将证书生命周期管理转化为可运营的产品能力,包括自

Interview_TC的博客 641

[Qt] 信号与槽:灵活编写多种类型槽函数

关于Qt中信号与槽 槽函数编写讲解

kevin_blog 1502

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4235

QT槽函数的使用

QT槽函数的使用 例如: 在头文件中设置槽函数 public slots: void OnClickedButtonEnsure(); void OnClickedButtonExit(); cpp文件 构造函数中写入 connect(ui.pushButton_Ensure, SIGNAL(clicked()), this, SLOT(OnClickedButtonEnsure())); co...

weixin_43303479的博客 1万+

SAP生产订单技术性完成(TECO)操作指南与实战应用

生产订单技术关闭操作指南主要包括单笔和批量关闭两种方式,通过CO02/COHV事务码完成。

m0_47402127的博客 1932

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

qt槽函数的四种写法

槽函数的四种写法

新法的博客 1959

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

QT信号与槽函数

QT中的信号与槽函数,UI设计师界面

hqb_newfarmer的博客 2096

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

qt 线程、信号、槽、触发的槽函数在那个线程运行

qt 线程、信号、槽、触发的槽函数在那个线程运行

xie__jin__cheng的博客 3782

QT跨平台应用程序开发框架(5)—— 常用按钮控件

QPushButton 表示一个按钮,我们前面使用过很多次,继承自 QAbstractButton,这个类是一个抽象类,是其他按钮的父类,如下图:c++面向对象三大特性——多态_c++三大特性实例-优快云博客是一个包含纯虚函数的类,无法创建出实例,仅仅是为了被派生类继承并且派生类继承后后也不能实例化出对象。只有重写虚函数派生类才能实例化出对象属性说明text按钮中的文本icon按钮中的图标iconSize按钮中图标的尺寸shortCut按钮对应的快捷键autoRepeat。

aaqq800520的博客 1330

qt 槽函数在那个线程执行由什么决定

qt 槽函数在那个线程执行由什么决定

xie__jin__cheng的博客 1794

QT--信号与槽函数

系统定义的槽函数与信号的类型是有局限性的,当系统提供不足以满足自己的需求时,这时我们变要自己定义信号与槽函数并将信号与槽函数进行关联起来,此时的信号系统是不能自动触发的需要我们手动触发。是一个不完整的函数只有声明没有定义,由系统提供或者是由用户自定义,由用户自定义在signals区域:系统定义的默认权限private。将触发的信号与槽函数进行关联绑定,当触发了这个信号系统便会自动调用槽函数执行槽函数里面的功能。下面所示选择相应的信号发送者,发送的信号,信号的接受者,与槽函数。参数一:信号的发起者(指针)

qq_47610967的博客 3239
上一篇: 【QT入门】 lambda表达式(函数)详解
下一篇: 【Qt问题】初始化菜单QMenu的时候,一直报错
从一的
博客等级 码龄5年 1995粉丝 213原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值