因为两个窗口互不相干,所以需要重新创建一个窗口类subWidget
subWidget.cpp文件
#include "subwidget.h" SubWidget::SubWidget(QWidget *parent) : QWidget(parent) { this->setWindowTitle("波老师"); this->setFixedSize(360,480); btn4.setParent(this); btn4.setText("切换到苍老师");
//点击按钮btn4实现给主窗口发送信号 connect(&btn4,&QPushButton::clicked,this,&SubWidget::sendSlot); } void SubWidget::sendSlot() { emit mySignal(); }
subWidget.h文件
#ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushButton> class SubWidget : public QWidget { Q_OBJECT public: explicit SubWidget(QWidget *parent = 0); void sendSlot(); signals: /*信号必须有singles关键字来声明 * 信号没有返回值,但可以有参数 * 信号就是函数的生命,只需声明,无需定义 * 使用:emit mySignal(); */ void mySignal(); public slots: private: QPushButton btn4; }; #endif // SUBWIDGET_H
#ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QPushButton> #include "subwidget.h"//自子窗口头文件 class MainWidget : public QWidget { Q_OBJECT public: MainWidget(QWidget *parent = 0); ~MainWidget(); void mySlot();//自定义的槽函数 void changeWin(); void dealWin(); private: QPushButton btn3;//创建按钮btn3 SubWidget w;//该对象在主窗口中,子窗口没有办法调用,所以需要利用子窗口发送给主窗口消息,进而主窗口进行处理 }; #endif // MAINWIDGET_H
#include "mainwidget.h" #include <QPushButton> MainWidget::MainWidget(QWidget *parent) : QWidget(parent) {
//互相切换窗口的小游戏
this->setFixedSize(360,480);
this ->setWindowTitle("苍老师");
btn3.setParent(this);
btn3.setText("换到波老师");
btn3.move(50,50);
//显示子窗口
// w.show();
//点击按钮btn3实现主窗口隐藏,子窗口显示
connect(&btn3,&QPushButton::released,this,&MainWidget::changeWin);
//处理子窗口发送过来的信号
connect(&w,&SubWidget::mySignal,this,&MainWidget::dealWin);
}
//自定义槽函数的实现
void MainWidget::mySlot()
{
btn2->setText("I LOVE YOU");
}
void MainWidget::changeWin()
{
//子窗口显示,
w.show();
//本窗口隐藏
this ->hide();
}
void MainWidget::dealWin()
{ //子窗口隐藏
w.hide();
//本窗口显示
this->show();
}
MainWidget::~MainWidget()
{
}
利用emit 来进行子窗口信号的传递,进而在主窗口中进行信号处理(即子窗口发送一个消息给主窗口,剩下的就交给主窗口进行处理)