#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(); }