Qt--带参数的信号

//主窗口头文件
#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include "subwidget.h"

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();
//public slots:
    void changeWin();
    void dealSub();
    void dealSlot(int ,QString);
private:

    QPushButton mb;

    SubWidget sw;
};
#endif // MAINWIDGET_H

//主窗口源文件
#include "mainwidget.h"
#include<QPushButton>
#include<QDebug> //打印
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowTitle(QStringLiteral("我是老板主窗口"));
    mb.setParent(this);
    mb.setText("ToSub");
    mb.move(50,50);

    //显示子窗口
    //subw.show();
    connect(&mb,&QPushButton::released,this,&MainWidget::changeWin);

    //处理子窗口的信号
    //信号具有广播的性质,子窗口发送信号,主窗口捕获之后作dealSub的处理
    void (SubWidget:: *pNoPara)()=&SubWidget::mySignal;
    connect(&sw,pNoPara,this,&MainWidget::dealSub);
    void (SubWidget:: *pHavePara)(int , QString)=&SubWidget::mySignal;
    connect(&sw,pHavePara,this,&MainWidget::dealSlot);
    resize(500,500);

//    //Qt4信号连接 不建议使用 容易出错,因为把函数名转化成字符串,不进行错误检查
//    //Qt4槽函数必须有slots关键字来修饰
//    connect(&sw,SIGNAL(mySignal()),this,SLOT(dealSub()));
//    connect(&sw,SIGNAL(mySignal(int,QString)),this,SLOT(dealSlot(int,QString)));
}

void MainWidget::changeWin()
{
    sw.show();
    this->hide();
}

void MainWidget::dealSub()
{
    sw.hide();
    this->show();
}

void MainWidget::dealSlot(int a, QString str)
{
    qDebug()<<a<<" "<<str; //打印
}

    MainWidget::~MainWidget()
{
}

//子窗口头文件
#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include<QPushButton>
class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);

    void sendSlot();
signals:
    /*
     * 信号必须有signals关键字来声明
     * 信号没有返回值,但可以有参数
     * 信号就是函数的声明,只需声明,无需定义
     * 使用:emit mySignal();
     * 信号可以重载
    */
    void mySignal();
    void mySignal(int, QString);
private:
    QPushButton sb;
};

#endif // SUBWIDGET_H

//子窗口源文件
#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle(QStringLiteral("我是公司的好员工"));
    sb.setParent(this);
    sb.setText("ToBOSS");
    sb.move(50,50);
    connect(&sb,&QPushButton::clicked,this,&SubWidget::sendSlot);//点击子窗口按钮就会发送我们自定义的信号
    resize(500,500);
}
void SubWidget::sendSlot() //函数的功能就是发送我们自定义的信号
{
    emit mySignal(); //子窗口自定义信号
    emit mySignal(250,QStringLiteral("我是子窗口"));
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值