Qt-day02

 调用重载的信号

 

 

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

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

class MainWidget : public QWidget
{
    Q_OBJECT

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

    void cancelHandle();
    void slotForWWindow();
    void slotHidenMe();
    void showMe();
    void soltSubMsg(int num,QString msg);

private:
    QPushButton *okBtn;
    QPushButton *cancelBtn;
    QPushButton *helpBtn;
    QPushButton *closeBtn;

    QPushButton *btn3;
    //子窗口对象
    SubWidget subW;
};

#endif // MAINWIDGET_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声明   信号不用实现。如果不加signals关键词就需要实现,不实现就会报错  加上以后就不需要实现了
    /**
      // 1、信号的返回值必须为void
      2、可以有参数
      3、可以重载
      4、信号发送 emit + 信号名
     * @brief signSub
     */
    void signSub();
    void signSub(int,QString);

public slots:
    void mySolt();

private:
    QPushButton *b1;
};

#endif // SUBWIDGET_H

 

 

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    okBtn = new QPushButton(this);
    okBtn->setText("确定按钮");
    okBtn->move(20,100);

    cancelBtn = new QPushButton("取消按钮",this);
    cancelBtn->move(100,100);

    helpBtn = new QPushButton;
    helpBtn->setParent(this);
    helpBtn->setText("帮助");
    helpBtn->move(200,100);


    closeBtn = new QPushButton("关闭按钮",this);
    closeBtn ->move(300,100);

    // cancelBtn 关闭窗口
    connect(closeBtn,&QPushButton::clicked,this,&MainWidget::close);
    connect(cancelBtn,&QPushButton::clicked,this,this->cancelHandle);
    // 自定义槽函数
    /**
      1、QT5中可以是任意的类成员函数,全局函数,静态函数,lambda表达式
      2、槽函数需要与信号对应(返回值,参数)
      3、信号是没有返回值的,即槽函数返回值void
          void mySig(int,double,QString)
          void mySolt(int,double,QString)
     * @brief connect
     */
//    connect(helpBtn,&QPushButton::clicked,this,this->cancelHandle);

    connect(helpBtn,&QPushButton::released,this,&MainWidget::slotForWWindow);



    btn3 = new QPushButton("打开子窗口",this);
    btn3->resize(100,50);
    btn3->move(200,200);
    connect(btn3,&QPushButton::clicked,this,&MainWidget::slotHidenMe);

//    // 接口子页面的信号
//    connect(&subW,&SubWidget::signSub,this,&MainWidget::showMe);
    // 信号重载调用
    /**
      * @brief connect
      */
    void (SubWidget::*MySigSub)() = &SubWidget::signSub;
    // 接口子页面的信号
    connect(&subW,MySigSub,this,&MainWidget::showMe);
    void (SubWidget::*MySigSubPlus)(int,QString) = &SubWidget::signSub;
     connect(&subW,MySigSubPlus,this,&MainWidget::soltSubMsg);



}

MainWidget::~MainWidget()
{

}

void MainWidget::cancelHandle(){
    qDebug() << "您点击了取消按钮" ;
}
void MainWidget::slotForWWindow(){
    qDebug() << "册数传入的值:" ;
    closeBtn->setText("new 关闭");
}
void MainWidget::slotHidenMe()
{
    this->hide();
    subW.show();
}
void MainWidget::showMe()
{
subW.hide();
this->show();
}

void MainWidget::soltSubMsg(int num,QString msg)
{
    qDebug() << "数字:" << num << ",内容:" << msg <<endl;
}

 

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{

    b1 = new QPushButton("中腾",this);
    b1->resize(100,40);
    setWindowTitle("软件园");

    // 子页面 对 父页面进行操作 自定义信号 间接操作

    resize(400,600);

    connect(b1,&QPushButton::clicked,this,&SubWidget::mySolt);

}

void SubWidget::mySolt()
{
    emit signSub();
    emit signSub(200,"hello 200!!");
}

 

posted @ 2023-08-01 13:07  巨兽~墨菲特  阅读(4)  评论(0编辑  收藏  举报