IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++——QT之信号与槽 -> 正文阅读

[C++知识库]C++——QT之信号与槽

通俗的理解信号与槽

信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号。发射信号使用Qt的emit关键字。QT 的 signals 关键字指出进入了信号声明区,随后即可声明自己的信号。
以上是比较官方的理解方式,但是我们可以通俗的理解为:
信号的存在是为了给槽方法进行通信,传输信息,哪怕不在一个界面。说先将一个槽方法绑定指定的信号,当别的组件需要调用该方法时候,直接调用被绑定的信号即可。
因为信号绑定比较灵活,关联的时候有一对一,一对多,多对一,多对多的关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如下演示的就是一个槽对一个信号的传输:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

signals:
    void comeon(QString &str);      //信号与曹不能实现,也无需实现


private slots:
    void on_WHButton_clicked();

    void iamwuhan(QString &str);


private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

在这里插入代码片
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this,SIGNAL(comeon(QString&)),this,SLOT(iamwuhan(QString&)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_WHButton_clicked()
{
    QString str="你好武汉!";
    comeon(str);
}

void MainWindow::iamwuhan(QString &str)
{
    qDebug() <<str;
}

在这里插入图片描述
点击这里的武汉的按钮,就会发送“你好武汉!”
先定义一个槽A,定义一个槽B。然后定义一个信号c。
用一个从connect函数关联槽B和信号c。之后槽A调用信号c,就会调用函数
B。

①一个信号连接一个槽:
connect(sender, SIGNAL(single1()), receiver, SLOT(slotFun()));
②一个信号连接一个信号:
connect(sender, SIGNAL(single1()), receiver, SIGNAL(single2()));
③一个信号连接多个槽,关联信号的槽函数按照建立连接时的顺序依次执行:
connect(sender, SIGNAL(single1()), receiver1, SLOT(slotFun()));
connect(sender, SIGNAL(single1()), receiver2, SLOT(slotFun()));
connect(sender, SIGNAL(single1()), receiver3, SLOT(slotFun()));
④多个信号连接一个槽:
connect(sender1, SIGNAL(single1()), receiver, SLOT(slotFun()));
connect(sender2, SIGNAL(single2()), receiver, SLOT(slotFun()));
connect(sender3, SIGNAL(single3()), receiver, SLOT(slotFun()));
⑤ 信号与槽的自动关联:
ui_xxxx.h文件中 connectSlotsByName()方法通过对象名支持信号与槽的自动关联。不采用connect()函数而是采用on_objectName_signal命名方式命名槽达到自动关联的效果。

信号与槽的断开关联:
QObject::disconnect(const QObject* sender,const char* signal,const QObject receiver,const char method);
①断开与一个对象所有的信号的所有关联
disconnect(sender,0,0,0);
等价于:
sender->disconnect();
②断开与一个指定信号的所有关联
disconnect(sender, SIGNAL(single1()), 0, 0);
等价于:
sender->disconnect(SIGNAL(single1()));
③ 断开与一个指定接受者receiver的所有关联
disconnect(sender, 0, receiver, 0);
等价于:
sender->disconnect(SIGNAL(single1()));
④断开指定信号与槽的关联:
disconnect(sender, SIGNAL(single1()), receiver, SLOT(slotFun()));
等价于:
disconnect(myConnection); //myConnection为connect()的返回值

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:43:20  更:2021-07-17 11:44:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 18:05:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码