QT的学习信号与槽实现两个窗体的联通

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText("切换到子窗口");
    b1.move(100,100);
    resize(400,400);
    connect(&b1,&QPushButton::pressed,this,&MyWidget::MySolt);
    //处理子窗口的信息
    void (SubWidget::*ptr)(int,QString)=&SubWidget::mySignal;
    connect(&m_cd,ptr,this,&MyWidget::SoltParam);

}

MyWidget::~MyWidget()
{
#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
     b2.setParent(this);
     b2.setText("切换到主窗口");
     b2.move(100,100);
     resize(400,400);
     connect(&b2,&QPushButton::pressed,this,&SubWidget::MySolt);

}
SubWidget::~SubWidget()
{

}

void SubWidget::MySolt()
{
    emit mySignal(250,"zhang");
}
 
 
#ifndef MYWIDGET_H
#define MYWIDGET_H

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


class MyWidget : public QWidget
{
    Q_OBJECT
public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();
    void MySolt();
    void DealSolt();
    void SoltParam(int a,QString str);
private:
    QPushButton b1;
    SubWidget m_cd;
};

#endif // MYWIDGET_H
#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>

class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);
    ~SubWidget();
signals:
    /*
     * 信号必须由这个关键字来声明
     * 信号没有返回值,但是可以修改
     * 信号就是函数的声明,只需声明,无须定义
     * 使用:emit mySignal();
     * 可以有参数,怎么接受?
     */
    void mySignal(int a,QString str);

public slots:
    void MySolt();
private:
    QPushButton b2;
};

#endif // SUBWIDGET_H


}

void MyWidget::MySolt()
{
 m_cd.show();
 this->hide();
}

void MyWidget::SoltParam(int a,QString str)
{

   qDebug() <<a<<str.toUtf8().data();
}
void MyWidget::DealSolt()
{
    this->show();
    m_cd.hide();
}

猜你喜欢

转载自www.cnblogs.com/z2529827226/p/11694323.html