学习信号和槽(1)

news2024/11/20 11:43:12

信号和槽函数

  • 一、了解信号和槽的概念
  • 二、信号和槽的使用
    • 2.1、第一种方法
    • 2.2、第二种方法
    • 2.3、第三种方法
    • 2.4、第四种方法
    • 2.5、第五种方法

一、了解信号和槽的概念

信号(Signal):就是在特定条件下被发射的事件,比如QPushButton 最常见的信号就是鼠标单击时发射clicked()信号。

槽函数:当我们收到这个信号后,需要有一个函数对信号响应,这个函数就是槽函数,槽函数跟一般的函数用法一样,只不过槽函数可以跟信号进行关联。当信号被发射时,槽函数将会自动执行。

Qt中,信号的三个要素:

信号源:由哪个控件发出的信号。
信号的类型:用户进行不同的操作,就可能触发不同的信号;点击按钮,触发点击信号;在输入框中移动光标,触发移动光标的信号;勾选一个复选框,选择一个下拉框,都会触发出不同的信号。
信号的处理方式:槽 => 函数;Qt中可以使用connect这样的函数,把一个信号和一个槽关联起来,后续只要信号触发了,Qt就会自动执行槽函数。

补充:
所谓的触发信号,一定是先把信号的处理方式都准备好,在触发信号。
所谓的槽函数本质就是一种回调函数(callback)。
还有什么也用到了回调函数?

c语言阶段:
1.实现转移表,降低代码的“圈复杂度”。
2.实现回调效果 => qsort
c++阶段:
1.STL中函数对象/仿函数。
2.lambda表达式。
Linux中:
1.信号处理函数
2.线程的入口函数
3.epoll基于回调机制

二、信号和槽的使用

connect是QObject(所有类的祖先)提供的一个静态成员函数。(Qt中提供的这些类,存在一定的继承关系)

2.1、第一种方法

Qt5写法
connect静态成员函数的格式:

connect(
    	const QObject *sender, //当前信号是哪个控件发出来的
 		const char *signal,    //信号的类型
   		const QObject *receiver, //哪个对象负责处理
    	const char *method,     //槽函数(信号如何处理,提供一个成员函数)
     	Qt::ConnectionType type = Qt::AutoConnection

第一、第二参数不匹配或者第三、第四参数不匹配(2、4参数的函数指针不是1、3参数的成员函数,就会不匹配),就会编译出错。
在这里插入图片描述
创建一个按钮,然后使用connect进行信号和槽的连接
在这里插入图片描述
点击程序“退出”按钮,点击信号被触发,就会处理槽函数。

connect(button1, &QPushButton::clicked,this,&Widget::close);

推荐使用这种写法,信号名字、槽函数名字写错了,编译器会直接报错。
c++中,不允许使用两种不同的指针类型,相互赋值。

2.2、第二种方法

Qt4写法
这是Qt4的写法,从Qt5开始就不需要写SIGNAL和SLOT宏了,给connect提供了重载版本,第二个参数和第二个参数成了泛型参数,允许我们传入任意类型的函数指针。

connect(button1, SIGNAL(&QPushButton::clicked),this,SLOT(&Widget::close));

2.3、第三种方法

lambda表达式写法

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

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

2.4、第四种方法

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

2.5、第五种方法

自动生成法
在ui设计界面里直接点击控件,选择转到槽,再在里面选择槽函数。(通过这个方式,还可以很直观的看到某个控件有哪些槽函数)
1.拖动按钮到窗口,然后右键,转到槽
在这里插入图片描述
2.widget.cpp文件的代码为

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* button =new QPushButton(this);
    button->setText("按钮");
    button->move(300,300);
    connect(button,&QPushButton::clicked,this,&Widget::handleClikecd);


}
Widget::~Widget()
{
    delete ui;
}
void Widget::handleClikecd()
//按下按钮,修改窗口标题
{
    this->setWindowTitle("窗口被按下");
}
//退出按钮的槽函数
void Widget::on_pushButton_clicked()
{
    this->close();
}

注意:widget.h文件里的声明要与widget.cpp文件里的定义相匹配。
点击退出,程序关闭,点击按钮,窗口标题被修改。
在这里插入图片描述
在Qt中除了connect来连接信号槽之外,还可以通过函数名的方式来自动连接。

//void Widget::on_这个部分是按钮的objectName_信号的名字();
void Widget::on_pushButton_clicked();

当符合上述规则之后,Qt就能自动的把信号和槽建立连接。

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

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

相关文章

OpenPCDet

一.简介 源码链接&#xff1a; https://github.com/open-mmlab/OpenPCDethttps://github.com/open-mmlab/OpenPCDet OpenPCDet 是一套基于PyTorch实现的点云3D目标检测代码库。&#xff08;也是个框架&#xff09; 设计思想&#xff1a;点云数据集&#xff08;KITTI、NuSce…

[深度学习]yolov10+bytetrack+pyqt5实现目标追踪

【简介】 利用YOLOv10、ByteTrack和PyQt5实现目标追踪是一个强大的组合&#xff0c;可以为用户提供一个交互式的实时目标追踪界面。以下是一个简化版的实现思路描述&#xff1a; 首先&#xff0c;YOLOv10是一个先进的目标检测算法&#xff0c;能够准确识别视频或图像中的目标…

注意力机制新突破!自适应Attention性能优越,可缝合到多种任务中

自适应注意力对比传统注意力机制&#xff0c;可以显著提高深度学习模型在处理复杂数据上的效率和准确性。 这种机制的核心在于&#xff1a;通过计算输入数据中不同部分之间的相关性或重要性&#xff0c;为这些数据部分分配不同的注意力权重&#xff0c;从而让模型能够更加专注…

xcode开发swift允许发送http请求设置

Xcode 现在新建项目默认只支持HTTPS请求&#xff0c;认为HTTP请求不安全&#xff0c;所以不支持。但是开发环境一般都是http模式&#xff0c;所以需要单独配置才可以访问。 需要到项目的设置里面&#xff0c;点击info&#xff0c;如果没有App Transport Security Setting这一项…

基于NANO 9K 开发板加载PICORV32软核,并建立交叉编译环境

目录 0. 环境准备 1. 安装交叉编译器 2. 理解makefile工作机理 3. 熟悉示例程序的代码结构&#xff0c;理解软核代码的底层驱动原理 4. 熟悉烧录环节的工作机理&#xff0c; 建立下载环境 5. 编写例子blink&#xff0c; printf等&#xff0c; 加载运行 6. 后续任务 0.…

无线领夹麦克风哪个品牌音质最好?领夹麦克风品牌排行榜前十名

​短视频、直播已成为现代生活中不可或缺的一部分&#xff0c;而领夹式无线麦克风则是这些活动中不可或缺的重要工具。它们能够轻松捕捉声音&#xff0c;让内容更加生动、真实。然而&#xff0c;市场上的无线麦克风种类繁多&#xff0c;价格各异&#xff0c;如何挑选一款适合自…

红外超声波雷达测距(water)

文章目录 一 RS-232二 RS485三 Modbus四 stm32多路超声波测距4.1 设计方案4.2 代码 参考资料总结 实验要求 一. 采用stm32F103和HC-SR04超声波模块&#xff0c; 使用标准库或HAL库 定时器中断&#xff0c;完成1或2路的超声波障碍物测距功能。 1&#xff09;测试数据包含噪声&am…

环境变量 | 是不是必须配置?怎么配置?

本文基于mysql和python环境&#xff0c;简单介绍了“什么是环境变量”、“环境变量是不是必须配置”、“环境变量配置方法”及“常用环境变量 path ”。 1、什么是环境变量 释义&#xff1a;一般是指在操作系统中&#xff0c;用来指定操作系统运行环境的一些参数&#xff0c;…

C++ 多重继承的内存布局和指针偏移

在 C 程序里&#xff0c;在有多重继承的类里面。指向派生类对象的基类指针&#xff0c;其实是指向了派生类对象里面&#xff0c;该基类对象的起始位置&#xff0c;该位置相对于派生类对象可能有偏移。偏移的大小&#xff0c;等于派生类的继承顺序表里面&#xff0c;排在该类前面…

162.二叉树:填充每个节点的下一个右侧节点指针(力扣)

代码解决 /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NULL), next(NULL) {}Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}Node(int _val, Node* _left, Node* _…

【linux】线程同步和生产消费者模型

线程同步 当我们多线程访问同一个临界资源时&#xff0c;会造成并发访问一个临界资源&#xff0c;使得临界资源数据不安全&#xff0c;我们引入了锁的概念&#xff0c;解决了临界资源访问不安全的情况&#xff0c;对于线程而言竞争锁的能力有强有弱&#xff0c;对于之前就抢到…

在CentOS7下构建TeamSpeak服务器并增加网易云点歌插件

文章目录 部署TeamSpeak创建一个新用户下载并解压服务端下载解压 启动服务端同意许可协议启动与配置开放端口设置开机自启 客户端连接 部署TS3AudioBot并添加网易云插件安装ffmpeg下载TS3AudioBot本体与插件并解压配置TS3AudioBot启动设置开机自启 部署网易云API安装git安装Nod…

【模型架构】学习RNN、LSTM、TextCNN和Transformer以及PyTorch代码实现

一、前言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;模型架构的不断发展极大地推动了技术的进步。从早期的循环神经网络&#xff08;RNN&#xff09;到长短期记忆网络&#xff08;LSTM&#xff09;、Transformer再到当下火热的Mamba&#xff08;放在下一节&a…

Linux|虚拟机|Windows 11 家庭版的Hyper虚拟机服务开启

前言&#xff1a; Windows11的版本是比较多的&#xff0c;但有的时候笔记本预装的可能是家庭版&#xff0c;而家庭版的Windows通常是不支持虚拟机的&#xff0c;也就是说Hyper服务根本就看不到 Windows的程序和功能大体如下&#xff1a; &#x1f197;&#xff0c;那么如何开…

ChaosBlade混沌测试实践

ChaosBlade: 一个简单易用且功能强大的混沌实验实施工具 官方仓库&#xff1a;https://github.com/chaosblade-io/chaosblade 1. 项目介绍 ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具&#xff0c;帮助企业提升分布式系统的容错能力&…

Nuxt3项目实现 OG:Image

目录 前言 1、安装 2、设置网站 URL 3、启用 Nuxt DevTools 4、创建您的第一个Og:Image a. 定义OG镜像 b. 查看您的Og:Image 5、自定义NuxtSeo模板 a. 定义 NuxtSeo模板 b. 使用其他可用的社区模板 6、创建自己的模板 a. 定义组件 BlogPost.vue b. 使用新模板 c.…

【爱空间_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

模型 FABE(特性 优势 好处 证据)法则

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。特性、优势、好处、证据&#xff0c;一气呵成。 1 FABE法则的应用 1.1 FABE法则营销商用跑步机 一家高端健身器材公司的销售代表正在向一家新开的健身房推销他们的商用跑步机。以下…

孩子用的灯什么样的好?安利几款适合孩子用的护眼台灯

随着学生们重返校园&#xff0c;家长和孩子们忙于新学期的准备工作&#xff0c;眼睛健康的考量自然也在其中。这也是为何近年来护眼台灯越来越受到欢迎的原因之一。作为一个长期近视并且日常用眼时间较长的人&#xff0c;我本人对护眼台灯有着长期的使用经历&#xff0c;并对它…

如何创建一个Angular项目(超简单)

1、安装Node.js&#xff08;官网Node.js下载&#xff09; 2、运行node -v和npm -v两条命令&#xff08;检验是否下载成功Node.js&#xff09; 3、npm i -g cnpm --registryhttps://registry.npmmirror.com&#xff08;用npm安装cnpm&#xff0c;将镜像源设置为国内镜像源&…