三、信号槽

news2024/9/23 15:26:23

三、信号槽

1.概念:

信号槽指的是信号函数与槽函数的连接,可以使用不同的对象通过信号槽连接在一起,从而实现对象之间的通信。

信号槽认为是对象之间的一种约定:如果.......,则.......

信号槽是Qt新增的特性,C++是不支持的,使用信号槽的前提条件:

1)通信的对象的类中要有Q_OBJECT

2)通信的对象必须继承自(包括间接继承)自QObject 【所以Qt对象的基类】类

2.信号槽的连接

信号槽是一种约定,主要通过以下实现

// 参数1:信号发射者 是一个名词,因果关系中的因,表示发射信号函数的对象
// 参数2:信号函数的名称 是一个动词,需要使用SINGNAL()包裹,因果关系的因,表示动作
// 参数3:信号接收者 是一个名称,因果关系中的果,表示执行动作(操作函数)的对象
// 参数4:槽函数的名称 是一个动词,需要使用SLOT()包裹,因果关系中的果,表示动作
QObject::connect(const QObject * sender, 
				    const char * signal, 
				    const QObject * receiver, 
				    const char * method) [static]

依次通过三种方式讲解信号槽的连接

1)自带信号->自带槽

2)自带信号->自定义槽

3)自定义信号->自带/自定义槽

2.1自带信号->自带槽

这是最简单的一种信号槽连接方式,因为信号函数和槽函数都在Qt源代码中实现了,只需要查询文档找到名称手动连接即可。

【例子】点击按钮,关闭窗口

分析:

参数1:按钮对象

参数2:点击信号

参数3:窗口对象

参数4:关闭槽

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include 
#include 

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    QPushButton* btn;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(400,400);
    btn = new QPushButton("关",this);
    btn->move(200,200);
    // 连接信号槽
    // 参数1:按钮对象
    //	参数2:点击信号 clicked
    //	参数3:窗口对象
    //	参数4:关闭槽 close
    connect(btn,SIGNAL(clicked()),this,SLOT(close()));
}

Dialog::~Dialog()
{
    delete btn;
}

2.2 自带信号 → 自定义槽

当槽函数完成的功能比较复杂时,Qt的源代码无法完全覆盖这样的功能,此时需要程序员手动写一个槽函数,并实现和连接。

需要注意的是槽函数实际上是一种特殊的成员函数。

【例子】点击按钮,把窗口向右下角移动,并输出当前的窗口坐标。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include 
#include 
#include 

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    QPushButton* btn;

    // 声明自定义槽函数
private slots:
    void mySlot();
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(400,400);
    btn = new QPushButton("关",this);
    btn->move(200,200);
    // 连接信号槽
    //   参数1:按钮对象
    //	参数2:点击信号 clicked
    //	参数3:this
    //	参数4:自定义槽函数mySlot
    connect(btn,SIGNAL(clicked()),this,SLOT(mySlot()));
}

// 定义槽函数
void Dialog::mySlot()
{
    // 先获得当前窗口的坐标
    int x = this->x();
    int y = this->y();
    // 移动窗口
    move(x+10,y+10);
    // 输出当前坐标值
    qDebug() << this->x() << this->y();
}

Dialog::~Dialog()
{
    delete btn;
}

2.3 自定义信号

自定义信号主要用户后期一些特殊的情况,目前还没发举例,因此基于下面的案例,强行使用,并不是问题的最优解。

需要注意的是,信号函数没有权限,只有声明没有定义。不能调用信号函数,只能发射信号函数。

【例子】点击按钮,关闭窗口。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include 
#include 

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    QPushButton* btn;

    // 自定义槽函数
private slots:
    void mySlot();

    // 声明自定义信号
signals:
    void mySignal();
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(500,500);
    btn = new QPushButton("关闭",this);
    btn->move(250,250);

    // 连接第一个信号槽
    connect(btn,SIGNAL(clicked()),
            this,SLOT(mySlot()));
    // 连接第二个槽函数
    connect(this,SIGNAL(mySignal()),
            this,SLOT(close()));
}

// 定义槽函数
void Dialog::mySlot()
{
    // 发射自定义信号函数
    emit mySignal();
}

Dialog::~Dialog()
{
    delete btn;
}

 

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

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

相关文章

五一2.74亿人倾巢而出,小长假到底去哪玩儿?

今天是五一劳动节小长假结束后&#xff0c;打工人上班的第一天。 今年的五一非比寻常&#xff0c;是三年口罩之后的第一个小长假&#xff0c;回家探亲的回家、出门玩的出门&#xff0c;据统计&#xff0c;今年五一劳动节5天小长假&#xff0c;累计有2.74亿人次在国内出游&…

Redis-周阳(17. Redis 分布式锁)学习笔记

上一篇 &#xff1a; 16.短信验证码 文章目录 1. 相关面试题2. Redis 搭建3. 编码实现分布式锁3.1 建 Model3.2 改 POM3.3 写 YML3.4 主启动3.5 业务类3.6 小测试 4. 上述案例存在问题及修改4.1 没有加单机版的锁4.2 分布式部署之后&#xff0c;单机版的锁失效4.3 出现异常时&a…

使用iServer的Web打印功能打印临时图层tempLayersSet资源

作者&#xff1a;Carlo 背景&#xff1a;最近很多小伙伴想要了解如何将临时图层资源打印输出为图片&#xff1f;其实&#xff0c;官网已发布的10.2.1版本以及11.1.0版本的iServer就已经支持该功能&#xff0c;我们可以通过下文的介绍来学习使用。 步骤一、生成一个临时图层资源…

【C生万物】 结构体篇

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 这期继续C语言的学习&#xff0c;进行结构体的讲解&#xff0c;值得注意的是&#xf…

Java版企业电子招标采购系统源代码Spring Boot + 二次开发 + 前后端分离 构建企业电子招采平台之立项流程图

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

SpringCloud------Eureka集群版整合生产(集群)以及消费(五)

SpringCloud------Eureka集群版整合生产以及消费&#xff08;五&#xff09; 集群避免单点故障的发生。 服务注册&#xff1a; 将服务信息注册进服务中心 服务发现&#xff1a; 从注册中心上获取服务信息 实质&#xff1a;存key服务名&#xff0c;取value调用地址 1.先启动eur…

STM32-IAP基本原理及应用 | ICP、IAP程序下载流程 | 程序执行流程 | 配置IAP到STM32F4xxx

目录 1.串口IAP介绍1.1STM32编程方式1.2STM32系列芯片系统存储器区域1.2.1 STM32F40x/41x1.2.2 STM32F42x/43x 1.3STM32启动模式选择1.4ICP下载流程1.5IAP下载流程1.6一般的程序执行流程1.7加入IAP之后程序运行程序1.8STM32复位后如何跳转到main函数1.9IAP升级应用程序过程 2.A…

复合查询 --- MySQL总结(三)

复合查询 文章目录 复合查询多表查询自连接子查询单行查询多行查询多列子查询合并查询 表内连和外连内连外连 多表查询 前面讲述的关于进行一个表的简单查询和关于时间函数的相关问题&#xff0c;下面要进行复合查询的相关内容。 这里要使用卡笛尔集的概率让两个表融合成为一个…

美国第十次加息 正面临史上最严重的债务危机 经济形势堪忧

美联储周三如期宣布加息25个基点&#xff0c;将联邦基金利率目标区间上调到5%至5.25%之间&#xff0c;这已是美联储自去年3月以来的第十次加息。 FOMC在声明中强调&#xff0c;美国第一季度经济活动温和扩张&#xff0c;近几个月新增就业岗位强劲&#xff0c;失业率依然处于低位…

WxGL应用实例:绘制点云

WxGL附带了几个工具函数&#xff0c;其中read_pcfile用来解析.ply和.pcd格式的点云文件&#xff0c;该函数返回一个PointCloudData类实例&#xff0c;包含以下属性&#xff1a; PointCloudData.ok - 数据是否可用&#xff0c;布尔型PointCloudData.info - 数据可用性说明&…

Vue 面试题汇总

前言 面试题整理自 Vue面试专题&#xff0c;题解结合了个人的思考和理解&#xff0c;供大家参考。 个人觉得村长的题目选的都挺好的&#xff0c;而且题解也很全面&#xff0c;就是题解比较书面&#xff0c;大家实际面试的时候可以尽量口语化&#xff0c;按照答题思路组织语言…

BadUsb使用

1 IDE下载 地址&#xff1a;Software | Arduino 2 开发版驱动安装 linux和mac版本会自动识别提示你安装开发板&#xff0c;驱动貌似不需要额外安装 win需要根据板子型号去下载安装驱动 如 Arduino驱动的安装教程-DFRobot产品资料库 默认会提示你根据你插入的设备进行提示…

C++ 中的引用

引用 变量名&#xff0c;本身是一段内存的引用&#xff0c;即别名(alias).引用可以看作一个已定义变量的别名 引用的语法: Tvpe& name var&#xff1b; 类型& 引用变量名称 变量名称 这就是引用变量的定义。&和类型结合称之为引用符号&#xff0c;不是取…

【一起啃书】《机器学习》第六章支持向量机

文章目录 第六章 支持向量机6.1 间隔和支持向量6.2 对偶问题6.3 核函数6.4 软间隔与正则化6.5 支持向量回归6.6 核方法6.7 一些问题 第六章 支持向量机 6.1 间隔和支持向量 给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , y i ∈ { − 1 , …

Echarts 自定义y轴value值

在CSDN问答区&#xff0c;碰到一个有意思的问题&#xff0c;解决思路在这里记录一下。 需求为&#xff1a;进行四等份展示&#xff0c;即中间价差值 (最大值 - 最小值) / 4&#xff0c;左侧数据从上到下分别为&#xff1a;最大值、最大值 - (最大值 - 最小值) / 4、最大值 - …

测试工程师用了3个月从月薪8k涨到12k,我是这么做到的?

先说一下自己的个人情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南金蝶软件公司&#xff0c;干了接近3年的测试工程师&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企…

MySQL知识学习04(MySQL事务隔离级别详解)

1、事务隔离级别总结&#xff1f; SQL 标准定义了四个隔离级别&#xff1a; READ-UNCOMMITTED(读取未提交) &#xff1a; 最低的隔离级别&#xff0c;允许读取尚未提交的数据变更&#xff0c;可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交) &#xff1a; 允许…

剧本杀游戏app开发

剧本杀游戏app开发通常会涉及以下技术&#xff1a; 开发语言&#xff1a;剧本杀游戏app可以使用各种编程语言进行开发&#xff0c;例如Java、Kotlin、Swift等。 游戏引擎开发&#xff1a;为了实现游戏过程中的角色扮演、对话、动画等效果&#xff0c;需要使用适当的游戏…

Docker-Compose介绍

文章目录 一、Docker-compose 简介二、YAML 文件格式及编写注意事项三、Docker Compose配置常用字段四、Docker Compose 常用命令五、Docker Compose 文件结构六、compose 部署1、Docker Compose 环境安装2、compose部署nginx3、compose部署lnmp 一、Docker-compose 简介 Dock…

odoo 常用小部件及其用法

文章目录 1) 显示百分比2) 标签组件3) handle组件&#xff08;拖拽排序&#xff09;4) 状态栏组件5) binary组件6) 货币组件7) tatinfo组件8) 日期型字段只显示年月 odoo的一些小部件主要定义在&#xff1a;模块/static/src/js下 1) 显示百分比 模型字段execution_percent定义…