新建项目,QWidget,取消勾选ui
b1按钮,按下,触发showSecondWin()函数
b2按钮,按下,触发sendSignal()函数(发射MySignal()信号)
子窗体w2,发射的MySignal()信号,触发showMainWin()函数
/*mywidget.h代码*/ #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QPushButton>//引入按钮 #include "secondwindow.h" //子窗口头文件 class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = 0); ~MyWidget(); void showSecondWin();//自定义的槽函数 void showMainWin(); private: QPushButton b1;//按钮b1 SecondWindow w2;//子窗体 }; #endif
/*secondwindow.h代码*/ #ifndef SECONDWINDOW_H #define SECONDWINDOW_H #include <QWidget> #include<QPushButton>//引入按钮 class SecondWindow : public QWidget { Q_OBJECT public: SecondWindow(QWidget *parent = nullptr); void sendSignal();//自定义的槽函数 signals: //信号必须有signals关键字,信号无返回值,可以有参数 void MySignal(); //自定义信号 private: QPushButton b2;//按钮b2 }; #endif
/*mywidget.cpp代码*/ #include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setWindowTitle("主窗体"); resize(400,100); //窗体大小 b1.setText("打开子窗体"); b1.setParent(this);//控件b1在MyWidget窗体上 //b1控件,按下,调用showMainWin()函数 connect(&b1,&QPushButton::pressed,this,&MyWidget::showMainWin); //w2窗体,发送信号,调用showSecondWin()函数 connect(&w2,&SecondWindow::MySignal,this,&MyWidget::showSecondWin); } void MyWidget::showMainWin()//自定义的槽函数 { w2.show();//显示子窗体 this->hide();//隐藏本窗体 } void MyWidget::showSecondWin()//自定义的函数 { this->show(); w2.hide(); } MyWidget::~MyWidget() { }
/*secondwindow.cpp代码*/ #include "secondwindow.h" SecondWindow::SecondWindow(QWidget *parent) : QWidget(parent) { setWindowTitle("子窗体"); resize(400,100); //窗体大小 b2.setText("返回主窗体"); b2.setParent(this);//按钮b2在SecondWindow上 //按下b2,发送信号 connect(&b2,&QPushButton::pressed,this,&SecondWindow::sendSignal); } void SecondWindow::sendSignal()//自定义的槽函数 { emit MySignal();//发送信号 }