04.Qt自定义信号

一、建立一个新框体

二、实现两个类(框体)信号的传递

1.实现的方法图

2.相关的代码

subwidget.h

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

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


signals:   //自定义信号,必须signals声明
    void sigSub();
    /*
     * 1.可以有参数
     * 2.可以重载
     * 3.返回值为void
     * 4.发送信号:(emit + 信号名字;)
     * emit sigSub();
     */
public slots:
    void myslot();

private:
    QPushButton* b1;
};

#endif // SUBWIDGET_H

subwidget.cpp

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    b1 = new QPushButton("中腾",this);
    b1->resize(100,100);
    setWindowTitle("软件园窗口");
    resize(400,600);
    //按一个按钮,告诉我自己我这个按钮已经按下去了
    connect(b1,&QPushButton::clicked,this,&SubWidget::myslot);

}
//发送一个自定义信号,这个信号就会告诉主窗口,因为这个信号是属于subW这个对象的。
void SubWidget::myslot()
{
    //发送信号
    emit sigSub();
}

mainwidgt.h

#ifndef MAINWIDGT_H
#define MAINWIDGT_H

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

class MainWidgt : public QWidget
{
    Q_OBJECT

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

    //自定义槽函数
    void slotForMainWidget();
    void slotHideMe();
    void slotShowMe();
private:
    QPushButton* b1;
    QPushButton* b2;
    QPushButton* b3; //显示子窗口
    //子窗口对象
    SubWidget subW;
};
#endif // MAINWIDGT_H

mainwidgt.cpp

#include "mainwidgt.h"

MainWidgt::MainWidgt(QWidget *parent)
    : QWidget(parent)
{
    //init
    b1 = new QPushButton("老大",this);
    b1->move(100,100);

    //init
    b2 = new QPushButton("老二",this);
    b2->setParent(this);
    b2->setText("老二");
    b2->move(200,200);
    /*
     * qt 信号和槽他们都是函数
     * 1.信号只有函数声明,不需要函数定义
     * 2.槽函数既需要声明,也需要函数定义,其实是一个回调函数(当时机成熟才执行)
     */
    //connect(b1,&QPushButton::pressed,this,&MainWidgt::close);

    connect(b1,&QPushButton::pressed,this,&MainWidgt::slotForMainWidget);
    /*
     * 自定义槽函数
     * 1.槽函数在Qt5 可以是任意成员函数,全局函数,静态函数,lambda表达式(隐式函数)
     * 2.槽函数需要与信号相对应(返回值,参数)
     * 3.信号没有返回值,槽函数返回值:void
     * 4.void mysig(int, double,QString);
     *   void myslot(int,double,Qstring);
     * 5.槽函数的参数是为了接受信号传过来的数据
     * 6.槽函数的参数应该是不能够大于信号的参数个数,可以少于信号的参数个数
     *      void mysig(int, double,QString);
     *      void myslot(int,double);
     * 7.槽函数可以重载
     */
    //b3 显示子窗口SubWidget ---subW
    b3 = new QPushButton("软件园",this);
    b3->resize(100,50);
    b3->move(200,200);
    //在写Qt的过程中,自定义信号是用的非常多的,因为可以给两个毫不相关的类(窗口)建立联系
    connect(b3,&QPushButton::clicked,this,&MainWidgt::slotHideMe);
    //subW中的sigSub自定义信号来之后触发槽函数进行业务处理
    connect(&subW,&SubWidget::sigSub,this,&MainWidgt::slotShowMe);

}

MainWidgt::~MainWidgt()
{
}

void MainWidgt::slotForMainWidget(){
        b2->setText("我被老大改名字了。。。");
}

void MainWidgt::slotHideMe()
{
    //隐藏自己
    hide();
    //显示软件园窗口
    subW.show();
}

void MainWidgt::slotShowMe()
{
    //显示自己
    show();
    //隐藏软件园窗口
    subW.hide();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值