首页 > 其他分享 >三、信号与槽

三、信号与槽

时间:2023-10-30 17:06:37浏览次数:28  
标签:btn 信号 void Dialog include 函数


1. 信号槽的定义

信号函数和槽函数是Qt在C++的基础上新增的功能,功能是实现对象之间的通信。
实现信号槽需要有两个先决条件:

  • 通信的对象必须是从QObject派生出来的
    QObject是Qt所有类的基类。
  • 类中要有Q_OBJECT

2. 信号槽的使用

2.1 函数原型

最常用且最基础的信号槽连接函数如下所示:
// 参数1:发送者,信号槽触发的来源的对象
// 参数2:信号函数,发送者的触发动作,使用SIGNAL()包裹
// 参数3:接收者,信号槽触发后执行动作的对象
// 参数4:槽函数,接收者执行的动作,使用SLOT()包裹
QObject::connect(const QObject * sender, 
				    const char * signal, 
				    const QObject * receiver, 
				    const char * method) [static]

按照不同的情况,分为三种情况进行学习:

  • 方式一:自带信号→自带槽
  • 方式二:自带信号→自定义槽
  • 方式三:自定义信号

可以使用disconnect函数断开已经连接的信号槽,参数与connect连接时保持一致。返回值为是否断开成功,如果已经不连接了,则会断开失败,此时不会有任何影响。

2.2 自带信号→自带槽

这种情况下信号函数和槽函数都是Qt内置的,程序员只需要找到对应关系后连接即可。

【例子】点击按钮,关闭窗口。
分析:
发射者:按钮
信号函数:点击
接收者:窗口
槽函数:关闭

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    QPushButton* btn;
};

#endif // DIALOG_H
#include "dialog.h"

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

//  发射者:按钮
//	信号函数:点击
//	接收者:窗口
//	槽函数:关闭
    connect(btn,SIGNAL(clicked()),this,SLOT(close()));
}

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

2.3 自带信号→自定义槽

【例子】点击按钮,窗口向右侧移动10个像素,向下移动10个像素,同时输出当前的窗口坐标。
分析:
发射者:按钮
信号函数:点击
接收者:窗口
槽函数:自定义

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QDebug>

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    QPushButton* btn;

private slots: // 槽函数
    void mySlot(); // 头文件声明
};

#endif // DIALOG_H
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(300,300);
    btn = new QPushButton("关闭",this);
    btn->move(100,150);
    // 发射者:按钮
//    信号函数:点击
//	接收者:窗口
//	槽函数:自定义
    connect(btn,SIGNAL(clicked()),this,SLOT(mySlot()));
}

void Dialog::mySlot() // 源文件定义
{
    // 先获得当前的窗口坐标
    int x = this->x();
    int y = this->y();
    // 窗口向右侧移动10个像素,向下移动10个像素
    move(x+10,y+10);
    // 同时输出当前的窗口坐标。
    qDebug() << x+10 << y+10;
}

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

2.4 自定义信号

这种方式主要用于解决复杂问题,所以在本节强行使用。

信号函数具有以下特点:

标签:btn,信号,void,Dialog,include,函数
From: https://blog.51cto.com/u_14458591/8095384

相关文章

  • 使用IBM ART库生成交通信号牌的攻击样本
    目标:生成对抗样本,扰动图像,让原本是“停”的信号牌识别为“禁止驶入”: 代码如下(注意,因为我找的cnn原始模型支持的是灰度图像,所以彩色的对抗样本还需要修改代码):importcv2,osimportnumpyasnpimportnumpyasnpimporttensorflowastffromkeras.modelsimportload_......
  • 请说说qt主要用的控件?信号和槽怎么实现的?
    qt主要用到的控件:QWidget基类,QPushButton普通按钮,QLineEdit文本输入,QSlider滑动条,QLabel显示文本或图像,QMainWindow创建应用程序的主窗口,QCeckBox复选框,QRadioButton单选按钮。 信号和槽的实现:每个控件可以发出信号,其它控件可以连接到这些信号的槽函数,以响应事件。......
  • 信号量Semaphore的使用
    Semaphore是jdk中提供的用来限制资源可以同时被几个线程访问的工具类,它底层也是用aqs实现的。以现实生活中停车场的例子来举例,一个停车场总的车位数是固定的,@Slf4jpublicclassThreadTest4{publicstaticvoidmain(String[]args){//假设只能停两辆车......
  • pyqt5阻止和删除信号
    QObject类r的下列函数提供了阻止、删除信号处理程序的方法:blockSignals()-如果Flag为True,暂时阻止接收信号;Flag为True时,恢复接收。该函数返回前面连接的状态值;signalsBlocked()-返回信号是否被阻止;disconnect()-删除信号处理程序......
  • 如何优化工业5G网关的网络信号
    工业5G网关,通常是指支持5G网络,具有高速率、低时延、广接入等特点的高性能工业物联网智能网关,这类网关具有强大的设备接入能力、通信协议转换、运算处理能力、联动控制能力,有助于提升工业物联网整体通信效率,实现生产管理能力和水平的飞跃。要发挥工业5G网关的优势,就要保障网关能够......
  • 基于Googlenet深度学习网络的信号调制类型识别matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本MATLAB2022a 3.算法理论概述      信号调制类型识别是在无线通信和无线电频谱监测中的一个重要任务。不同信号调制类型具有不同的频谱特征,深度学习方法在信号调制类型识别中取得了显著的成果。 3.1深度学习与......
  • 信号量与P、V操作
    对于这类问题,我计算啥的都没问题,就是看图很蒙,偏偏大部分都是看图题,所以就来恶补一下关于这种类型的图片题~1、P和V的各自的含义P操作负责分配资源,没有资源的时候就等着(进入阻塞队列)。V操作负责释放资源,在阻塞队列不为空的时候唤醒某个进程进入临界区2、公用信号量--实现进程间......
  • Qt之信号与槽机制
    一、信号与槽机制概述在Qt中,信号与槽(SignalsandSlots)是一种用于实现对象间通信的重要机制。信号与槽机制的本质是一种事件处理和消息传递系统,它允许对象在特定事件发生时通信并响应这些事件,而不需要对象直接调用彼此的方法。这种机制具有以下关键特征和本质:解耦性(Decoupling......
  • 揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘
    引言在我们前面的讲解中,我们详细了解了计算机系统的核心组件,包括CPU、内存和磁盘。然而,总线在这个体系中同样至关重要。总线是计算机内部各部件间通信的桥梁,涉及数据、地址和控制信号的传输。在接下来的内容中,我们将深入探讨各种类型的总线,为你解析计算机系统的关键组成部分。总......
  • 使用函数指针和信号槽函数情况比较
    函数指针的使用场景:C风格回调函数:当需要在C风格的API或库中使用回调函数时,函数指针非常有用。这允许您将函数指针传递给CAPI,以便在特定事件发生时调用您的函数。例如,Qt的一些底层模块可能需要与C库进行交互,这时函数指针是一个有用的工具。定时器:在Qt中,您可以使用QTimer类来触......