【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万+

基于图神经网络的社交网络虚假账号检测系统 (Graph-based Fake Account Detection System, GFADS)

FOLLOWSRETWEETSSHAREDCOMMENTSLIKESMENTIONSUseruser_idusernamejoin_datebioavatar_urllocationverifiedis_fakeLOAD CSV这是决定模型性能的关键环节,需结合和。XXedge_indexy新账号缺乏历史数据和丰富关系。全网图可能包含数亿节点和数十亿边,难以直接训练。社交网络是动态变化的,虚假账号策略也在不断进化。获取大规模、高质量的真实/虚假账号标注数据非常困难。

Deng945201314的博客 1481

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

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

Yui_的博客 3639

redhawk-sc使用简介

数据完整性对结果的准确性有很大影响,所以一定要保证数据完整性,Redhawk-sc在跑完后,Report里有Data Integrity界面,在这个界面会看到设计数据和库文件的数据完整性,在相应的报告中会有没有覆盖到的数据情况,要对每一项仔细检查,保证输入数据没有问题。文件一般加密,用户唯一需要选择的是文件的corner。其中,cell lef除了常规的standard cell,还有如DTCD,BTSV和clamp等cell的lef,不可缺失,否则data integrity将不是100%。

weixin_48518726的博客 3137

重复点击提交、产生多笔数据、保持数据只操作一次---->接口幂等性校验

幂等校验一、工作真实场景 + 常出现场景二、工作解决方案 + 百度解决方案 一、工作真实场景 + 常出现场景 真实场景:在一次工作中进行成品出库创建成品出库单时,手抖了一下,重复点击了两次确定(提交表单)。结果很神奇的发现居然产生了两笔一模一样的数据(流水号都一样),当时就很懵逼,稍作思考,想想应该是在同一时刻创建了两个出库单。感觉很有意思(因为之前没有遇到过,写代码的时候也没有考虑到这个问题的发生),后面换了一种方式复现场景:提交表单时多次点击Enter按钮,还是会产生多笔重复数据。 常见场景: 订单接

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 6万+

Qt:槽函数的五种写法

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

Rain_ZZX的博客 1425

21、深入了解SELinux安全系统与/proc文件系统

本文深入探讨了SELinux安全系统与/proc文件系统的原理及实际应用。详细介绍了SELinux的安全上下文、域转换、运行模式、角色管理以及策略查看工具seinfo的使用;同时解析了/proc文件系统的结构与功能,涵盖进程信息查看、系统资源监控及性能优化方法。结合SELinux与/proc的协同应用,提供了系统问题排查流程与安全管理最佳实践,帮助用户提升Linux系统的安全性与稳定性。

ik678901234的博客 61

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

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

m0_74163972的博客 1330

Windows安装 OpenClaw详细教程(使用wsl2+ubuntu)

OpenClaw 是一款于 2026年1月 正式对外开源的个人AI助手平台(AI Agent),由 PSPDFKit 创始人彼得·斯坦伯格(Peter Steinberger) 开发。它不仅仅是一个聊天机器人,更是一个能够主动执行任务的“数字管家”。OpenClaw的核心特点是本地化部署、隐私可控以及强大的自动化执行能力。OpenClaw 项目在开发过程中经历过两次更名,最终定为现名:初名:Clawdbot(因与 Claude 名称过于相似引发侵权争议而改名)。

猿小白的博客 1007

2025机械考研复试面试问题汇总篇(含13门科目),考研机械复试专业面试常见重点问题总结!考研机械复试专业面试准备看这一篇就够了!

(完整版内容:)1.汇集了本科各科的重点知识及多个机械名校800多个常见问题,共8.7万字185页,涵盖机械所以专业课的重点知识和常见问答。 2.涉及机械大类重点科目,包括:材料力学、控制工程、数控技术、机械制造技术基础、理论力学、液压传动、机械设计、机械原理、工程材料、互换性与技术测量、测试技术、汽车理论、程序设计与C语言等13门必修课。

weixin_56510835的博客 1861

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

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

kevin_blog 1502

[27] cuda 应用之 核函数实现图像通道变换

[27] cuda 应用之 核函数实现图像通道变换

yohnyang的博客 202

QT槽函数的使用

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

weixin_43303479的博客 1万+

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

qt槽函数的四种写法

槽函数的四种写法

新法的博客 1959

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

QT信号与槽函数

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

hqb_newfarmer的博客 2096

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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、付费专栏及课程。

余额充值