QT学习—五种直接连接信号槽的连接方式

2023-11-11

一、信号与槽机制

        特别鸣谢B站大轮明王讲Qt的讲解:大轮明王讲Qt的个人空间_哔哩哔哩_bilibili

信号与槽机制(Signal and Slot)是一种在软件开发中广泛使用的通信机制,主要用于处理事件驱动的程序设计。它是Qt框架中的一项重要特性,也被其他编程框架和库所采用。

信号(Signal)是对象发出的事件或状态的通知,它可以被其他对象接收并作出响应。槽(Slot)是处理信号的特定函数或方法。当信号发出时,与之关联的槽函数将被自动调用。信号和槽之间通过连接(Connection)建立联系。

使用信号与槽机制,可以实现对象之间的松散耦合。一个对象可以将自己的信号与其他对象的槽函数进行连接,使得事件发生时能够自动触发相应的响应处理。这种机制使得程序的编写更加灵活和可维护,因为对象之间的交互不需要显式的调用。

二、信号与槽直接连接

        直接连接(Direct Connection)是一种信号与槽之间的连接方式。在直接连接中,当信号发出时,槽函数会立即执行,不经过事件队列的处理,是一种同步的连接方式。直接连接适用情况:

1、函数和槽在同一个线程中.

2、函数和槽函数的执行时间较短,可以立即处理。

连接方式:

QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()), Qt::DirectConnection);

其中sender表示信号的发送者,signal表示发送的信号,receiver表示信号的接收者,slot表示执行的槽函数。

2.1、QT4中SIGNAL和SLOT包裹连接

        在QT中支持connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));这样的连接方式,但这样的连接方式存在一定的缺点:使用这种方式时,编译器不会做错误检查,即使函数名或者参数写错了,也能够编译通过,将问题留在了运行的时候,无法尽早发现问题。

//1、使用QT4 SIGNAL/SLOT连接
    connect(ui->btnSignalandSlot,SIGNAL(clicked()),this,SLOT(showMaximized()));

这里在引入了按钮btnSignalandSlot,发送按键按下事件,执行槽函数对MainWindow窗口的最大化显示。

2.2、QT5中使用函数地址进行连接

        这种方式中函数和槽都是用地址的形式进行连接

connnect(sender,&sender::signal,receiver,&receiver::slot);

这种方式能够在编译阶段就对函数类型、参数个数、参数类型等进行检查。

connect(ui->btnFunctionAddress,&QPushButton::clicked,this,&MainWindow::showNormal);

这里添加按钮btnFunctionAddress,当按钮按下时执行输出窗口正常显示。

2.3、通过UI界面选中按钮并转到槽

        这种方式本质上还是通过QT4版的那种连接方式,通过转到槽后,Qt Creator将自动声明和创建函数,在创建的函数体中编辑要执行的槽函数即可。

 

 这里执行槽函数后设置了输出窗口的标题内容。

2.4、通过UI界面的信号槽编辑页面进行连接

        这种方法和2.3的转到槽连接类似,但这种方式更便于理解,更加形象。

  发送者选择发送的控件,信号则是发送信号类型,接收者即接收目标,槽即要执行的内容和函数。需要添加或删除多个连接时点击右上角的“加号”和“减号”即可。这里添加了按钮btnUIEditSlot发送点击响应函数,执行对应用程序窗口全屏显示的的内容。

2.5、Lambda表达式连接

        Lambda表达式是一种匿名函数方式,也可以称为闭包,它是一种简洁、方便的方式来表示和定义函数。在C++11中的形式为:

[ captures ] ( arguments ) -> return_type { body }
  • [captures]:可选的捕获列表,用于指定Lambda表达式中使用的外部变量。可以通过值捕获或引用捕获来获取外部变量的值。
  • (arguments):参数列表,指定Lambda函数接受的参数。参数可以是零个或多个。
  • -> return_type:箭头符号(->)后面是返回类型,用于指定Lambda函数的返回值类型。
  • { body }:函数体,包含Lambda函数的具体实现。可以是一行简单的表达式,也可以是多行语句块。
connect(ui->btnLambda,&QPushButton::clicked,this,[&](){this->close();});

这里创建按钮名为btnLambda,发送按钮点击信号,应用程序窗口执行关闭的槽函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT学习—五种直接连接信号槽的连接方式 的相关文章

随机推荐

  • Vue3头像(Avatar)

    效果如下图 在线预览 APIs 参数 说明 类型 默认值 必传 shape 指定头像的形状 circle square circle false size 设置头像的大小 number large small default Respons
  • 在Django4.03中使用自带的Admin管理后台创建部门表和员工表

    这两天 想帮公司搞个简单的员工管理系统 折腾了两天 查了很多方法 也走了很多弯路 本身自己学艺不精 不过还好 也折腾出来了 现在发表一下 自己的源码和遇到的坑 希望能帮助大家 一 先放源码 djangoProject3 settings p
  • 安卓抓包神器黄鸟HttpCanary安装配置及使用教程

    1 下载安装包 黄鸟抓包下载地址 2 安装下载的apk 3 证书安装问题 vivo手机我安装时打开黄鸟app 会直接弹出 直接安装即可 其他手机 需要去系统设置中安装 3 1 搜索 证书 选择CA证书 3 2 进行本人操作验证 3 3 安装
  • 常见指令及权限理解

    VMware 用来安装虚拟机的软件 在电脑上虚拟出一套计算机硬件环境 CentOS 操作系统 虚拟机 Linux 操作系统内核 Xshell 远程操作软件 可以远程操作linux主机 服务器 在XShell和直接在VMware终端写代码是一
  • 链塔智库

    目录 一 各地政策要闻 宁夏 推广区块链等技术实现数字化转型 宁波 前瞻性布局区块链等未来产业 重庆 区块链等新一代信息技术产业占全市软件业务收入总额近两成 云南 积极探索区块链等新技术在药品安全事前事中事后监管应用 广西 充分发挥跨境金融
  • cpp: Prototype Pattern

    Gold h 此文件包含 Gold 类 原型模式 Prototype Pattern C 14 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit pragma once ifndef GOLD
  • 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    分析 兔子的对数从第一月开始 1 1 2 3 5 8 规则 从第三月开始 每月的对数是前两月之和 题目问每个月的兔子总数 为更好理解 在此指定具体月数 改为求第20月的兔子总数 本题分别运用三种的方法实现 数组实现 用变量的变化实现 递归实
  • windows上删除不了文件

    遇到文件或者文件夹无法删除或者移动 其实本质是因为有应用或者其他软件在打开它 所以会导致我们无法更改他的位置 解决这个的办法就是把相应的软件关闭掉 把文件释放出来 然后我们就可以正常移动或者删除了 方法 步骤 遇到问题的情况 文件被使用无法
  • MySQL数据库总结 之 函数命令总结

    MySQL命令语句中的函数包含四种 字符串函数 数值函数 日期函数 流程函数 前两篇关于MySQL的博客 地址如下 MySQL数据库 SQL语言命令总结 数据类型 运算符和聚合函数汇总 Flying Bulldog的博客 CSDN博客htt
  • (附源码)计算机毕业设计SSM疫情隔离便民系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 字符串中找出连续最长数字串(两种题型)--C++

    题目描述一 读入一个字符串str 输出字符串str中的连续最长的数字串 输入描述 个测试输入包含1个测试用例 一个字符串str 长度不超过255 输出描述 在一行内输出str中里连续最长的数字串 输入 abcd12345ed125ss123
  • 安装xposed(解决xposed问题)

    科学上网可轻松解决本文的问题 经过测试leidian mumu yeshen三个模拟器的最新版本只有leidian安装完成后可以重启 其他两个均会卡99 模拟器再起不能 MuMu模拟器win版 版本 2 1 3 可以 安装xposed前需关
  • 面试必备—MySQL中数据查询语句

    一 基本概念 查询语句 基本语句 1 select from 表名 可查询表中全部数据 2 select 字段名 from 表名 可查询表中指定字段的数据 3 select distinct 字段名 from 表名 可对表中数据进行去重查询
  • 使用XStream实现Java对象与XML互相转换(不断更新中)

    添加pom依赖
  • 学习周报-2023-0210

    文章目录 一 在SUSE11sp3系统中将openssh从6升级到8 一 需求 二 系统环境 三 部署流程 1 上传编译安装的软件包 2 安装 gcc编译软件 3 安装依赖zlib 4 安装依赖openssl 5 安装openssh 二 在
  • 华为OD机试真题- 战场索敌-2023年OD统一考试(B卷)

    题目描述 有一个大小是NxM的战场地图 被墙壁 分隔成大小不同的区域 上下左右四个方向相邻的空地 属于同一个区域 只有空地上可能存在敌人 E 请求出地图上总共有多少区域里的敌人数小于K 输入描述 第一行输入为N M K N表示地图的行数 M
  • 8-js高级-2

    JavaScript 进阶 2 了解面向对象编程的基础概念及构造函数的作用 体会 JavaScript 一切皆对象的语言特征 掌握常见的对象属性和方法的使用 深入对象 内置构造函数 综合案例 深入对象 了解面向对象的基础概念 能够利用构造函
  • TesseractEngine

    URL http download csdn net download fuxuan928 4068683 GOOGLE https code google com p tesseractdotnet 下面识别OCR验证码用 NET来实现
  • 使用Python爬虫定制化开发自己需要的数据集

    在数据驱动的时代 获取准确 丰富的数据对于许多项目和业务至关重要 本文将介绍如何使用Python爬虫进行定制化开发 以满足个性化的数据需求 帮助你构建自己需要的数据集 为数据分析和应用提供有力支持 1 确定数据需求和采集目标 在开始定制化开
  • QT学习—五种直接连接信号槽的连接方式

    一 信号与槽机制 特别鸣谢B站大轮明王讲Qt的讲解 大轮明王讲Qt的个人空间 哔哩哔哩 bilibili 信号与槽机制 Signal and Slot 是一种在软件开发中广泛使用的通信机制 主要用于处理事件驱动的程序设计 它是Qt框架中的一