QT:singal信号和槽

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    //信号定义,函数返回值都为空,无需实现也不能实现
signals:
    void Welcome(QString &str);
    void Welcome1(QString &str);

private slots:
    void on_cbtn_clicked();

    void Welcometest(QString &str); //槽函数参数数量得小于等于信号参数
    void Welcometest1(QString &str);

    void on_wbtn_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::MainWindow *ui;
    //connect的返回值类型
    QMetaObject::Connection m_ret;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QtDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //信号和槽方法参数列表都只需要写类型,信号和槽可以一对多也可以多对一
    connect(this,SIGNAL(Welcome(QString &)),this,SLOT(Welcometest(QString &)));
    //一对多
    connect(this,SIGNAL(Welcome(QString &)),this,SLOT(Welcometest1(QString &)));
    //多对一
    m_ret = connect(this,SIGNAL(Welcome1(QString &)),this,SLOT(Welcometest1(QString &)));
    //信号发送信号
    //connect(this,SIGNAL(Welcome1(QString &)),this,SLOT(Welcome(QString &)));
//    connect(this,&MainWindow::Welcome,this,&MainWindow::Welcometest);
}

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


void MainWindow::on_cbtn_clicked()
{
    QString str = "欢迎!";
    //emit 发送信号Welcome
    emit Welcome(str);

    emit Welcome1(str);
}

void MainWindow::Welcometest(QString &str)
{
    QMessageBox::information(this,"提示",str);
}

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

void MainWindow::on_wbtn_clicked()
{
    QString str = "我干!";
    //emit 发送信号Welcome
    emit Welcome(str);
}

void MainWindow::on_pushButton_clicked()
{
    //断开信号和槽
    //disconnect(this,SIGNAL(Welcome1(QString &)),this,SLOT(Welcometest1(QString &)));
    disconnect(m_ret);
    qDebug() << "已断开一个信号和一个槽连接";
}

void MainWindow::on_pushButton_2_clicked()
{
    //断开一个信号连接的所有槽
    disconnect(this,SIGNAL(Welcome(QString &)),0,0);
    qDebug() << "已断开一个信号连接的所有槽连接";
}

void MainWindow::on_pushButton_3_clicked()
{
    disconnect(this,0,this,0);
    //disconnect(this,0,0,0);断开this所有相关的槽相应
    qDebug() << "已断开this发射的所有信号与this对象的所有槽连接";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值