QT:信号和槽

文章目录

  • 信号和槽
  • connect函数
    • 自定义槽
      • 第一种
      • 第二种

信号和槽

这里的信号和Linux的信号一样吗?

答案是差不多,但是也有一定的区别,而且也是两个不同的概念

信号有三个概念,一个是信号源,这个信号是由谁发送的,第二个概念是信号的类型,这个信号是那种类别的信号,第三个概念是信号的处理方式,也就是所谓的注册信号处理函数,在信号被触发的时候自动调用执行

在QT中的GUI程序当中,本质上就是让用户进行操作,就是让用户进行交互,这个过程就需要关注用户当前操作的具体是什么操作

那下面就引出了信号与槽的概念,信号就是上述的这个概念,而槽的概念其实就是所谓的信号处理函数,也就是这个函数的概念,在QT当中存在一个connect函数,这个函数就可以把信号和槽关联起来,后续只要信号触发了,那么QT就会自动调用槽函数,所谓的槽函数就是一种回调函数,这个概念就不过多讲述了,这是一个比较简单的概念

connect函数

这个函数在之前的内容中也了解过,这个函数和Linux中的connect函数没有任何关系,只是名字正好一样了

这个函数是隶属于QObject提供的一个静态的成员函数,而QT中提供的这些类,本质上是存在一定的继承关系的,比如说我们写的QWidget,它内部包含有各种内容,比如有按钮,文本框,输入框,而这些内容都是继承自QObject的,这个类是其他QT内置类的祖宗的概念

在QT内部已经定义了很多的槽,比如在QWidget当中就内置了一个叫做close的槽函数,而Widget本身也是继承自QWidget,也就是继承了父亲的槽函数,所以在进行connect的槽注册的时候,就可以直接使用这个close函数,所以我们就可以写出这样的内容:

在这里插入图片描述
而当点击这个关闭窗口的按钮的时候,就会调用对应的函数,就可以把窗口关闭了

自定义槽

第一种

这个也很简单,前面已经用过了,这里可以再使用一下:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handler();private:Ui::Widget *ui;
};
#endif // WIDGET_H
// 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->move(200, 200);resize(800, 600);connect(button, &QPushButton::clicked, this, &Widget::handler);
}Widget::~Widget()
{delete ui;
}void Widget:: handler()
{resize(1000, 1000);
}

第二种

下面说明第二种自定义槽的方式:

首先在ui界面中加入一个按钮

在这里插入图片描述
接着可以在选项中看到具体内容:

在这里插入图片描述
那么现在关心对应的点击回调,那么就会自动生成

在这里插入图片描述
直接在这个当中写内容即可

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{this->setWindowTitle("按钮被按下");
}

按下前:

在这里插入图片描述
按下后:

在这里插入图片描述
这样就实现了一个快速定义信号槽

值得注意的是,在这样的写法中是不需要进行connect的,原因是在QT中,除了用connect来进行链接外,还可以用函数名字的方式来进行自动连接,当函数名符合一定规则的时候,就会自动进行链接:

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ROMA核心特性数据、服务、消息、设备集成及统一运维】

1、数据集成 FDI旨在解决多种数据源的快速灵活集成能力&#xff0c;您可以在任意时间、任意地点、任意系统之间实现实时数据订阅和定时增量数据迁移。 &#xff08;1&#xff09;数据集成任务的生命周期管理 &#xff08;2&#xff09;FDI支持修改数据集成任务的信息、查看数…

强化学习:时序差分法【Temporal Difference Methods】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程&#xff0c;个人觉得赵老师的课件深入浅出&#xff0c;很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld…

简单说说 gather_plan_statistics

DBA的日常核心工作之一是对线上有性能问题的SQL语句进行优化。其中优化SQL语句的最关键的一步是得到SQL的执行计划。那么一个常见的问题来了。如何得到一个SQL语句的真实执行计划?方法有很多。今天说其中一种方法就是使用 gather_plan_statistics(收集计划统计信息) 首先简单…

微信小程序生成二维码加密(CryptoJS4.0加密PHP8.0解密)AES方式加密

1、小程序创建 crypto-js.js和crypto.js两个文件&#xff08;点击文件即可&#xff09; 2、小程序js页面引入 var crypto require(../../utils/crypto.js);//注意路径是否正确3、使用 let data {id: that.data.id,name: dx}console.log(JSON.stringify(data))console.log(&…

亚马逊云科技产品测评:玩转云服务器(EC2)

文章目录 &#x1f4d1;引言一、亚马逊发展历史介绍二、云服务器资源地域分布三、云服务器实例规格四、EC2计费模式五、亚马逊免费EC2领取 &#x1f4d1;引言 亚马逊&#xff1a;世界上最大的云服务器提供商 亚马逊云科技 是由亚马逊公司提供的一系列云计算服务。它提供了弹性计…

Java集合排序

1. 集合排序API 1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列&#xff0c;以使得集合中的元素按照预定义的顺序呈现。 在集合排序中&#xff0c;通常需要定义一个比较规则&#xff0c;这个比较规则用于决定集合中的元素在排序后的顺序。元素之间…

怎么防止源代码泄漏?十种有效方法防止源代码泄露

随着科技的发展&#xff0c;软件已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;软件的安全性问题也日益凸显&#xff0c;尤其是源代码的泄露&#xff0c;可能会导致严重的经济损失和声誉损害。为您提供十种真实有效的方法&#xff0c;帮助您保护源代码的安全…

9.4.k8s的控制器资源(job控制器,cronjob控制器)

目录 一、job控制器 二、cronjob控制器 一、job控制器 job控制器就是一次性任务的pod控制器&#xff0c;pod完成作业后不会重启&#xff0c;其重启策略是&#xff1a;Never&#xff1b; 简单案例 启动一个pod&#xff0c;执行完成一个事件&#xff0c;然后pod关闭&#xff1b;…

vue2实现右键菜单功能——vue-diy-rightmenu——基础积累

五一之前遇到一个需求&#xff0c;就是关于要实现自定义右键菜单的功能&#xff0c;普通的右键展示的菜单有【返回/前进/重新加载/另存为】等&#xff0c;希望实现的效果就是右键出现自定义的菜单&#xff0c;比如【编辑/删除/新增】等。 遇到这种的需求&#xff0c;可以直接去…

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…

天锐绿盾 | 如何保护企业数据安全?

天锐绿盾为企业数据安全提供了一系列综合性的保护措施&#xff0c;确保数据在存储、处理、传输等各个环节的安全性。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 具体措施包括&#xff1a; 文件透明加密&#xff1a;采…

震撼来袭!AI创新燃爆2024中关村论坛,唯迈医疗破解心脑血管“命门”危机

4月29日&#xff0c;备受瞩目的2024中关村论坛圆满闭幕。国内领先的介入诊疗全流程解决方案企业——唯迈医疗&#xff0c;携新一代Taikon太空 DSA和介入手术机器人惊艳亮相&#xff0c;以AI赋能介入诊疗&#xff0c;为心脑血管疾病治疗带来了革命性的突破&#xff0c;引发党央媒…