Qt中实现3个界面的来回切换
三个界面:bms(BMS界面)、wave(波形界面)、save(存储界面)
bms(wave的父界面,爷爷)->wave(save的父界面,爸爸)->save(孙子)
bms.h
#ifndef BMS_H
#define BMS_H
#include <QMainWindow>
#include "wave.h" //子界面wave
#include "save.h" //子界面save
namespace Ui {
class BMS;
}
class BMS : public QMainWindow
{
Q_OBJECT
public:
explicit BMS(QWidget *parent = nullptr);
~BMS();
private slots:
void on_wave_clicked();//打wave界面函数
void on_save_clicked();//打开save界面函数
void deal_wave_slot();//子界面wave信号处理函数
void deal_save_slot();//子界面save信号处理函数
private:
Ui::BMS *ui;
Wave wave;//子界面对象
}
bms.cpp
#include "bms.h"
#include "ui_bms.h"
BMS::BMS(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::BMS)
{
ui->setupUi(this);
connect(&wave,&Wave::open_bms,this,&BMS::deal_wave_slot);//接收到子界面wave发射来的信号后执行槽函数deal_wave_slot()
connect(&wave.save,&Save::save_open_bms,this,&BMS::deal_save_slot);//接收到子界面save发射来的信号后执行槽函数deal_save_slot()
}
BMS::~BMS()
{
delete ui;
}
void BMS::on_wave_clicked()
{
this->close();
wave.show();
wave.showMaximized();
}
/***按下按钮跳转至“存储界面”的槽函数***/
void BMS::on_save_clicked()
{
this->close();
wave.save.show();
wave.save.showMaximized();
}
/***接收到波形界面传来的信号后,执行下面操作***/
void BMS::deal_wave_slot()
{
this->show();
wave.close();
}
/***接收到存储界面传来的信号后,执行下面操作***/
void BMS::deal_save_slot()
{
this->show();
wave.save.close();
}
wave.h
注意:Save save;//子界面对象(注意这里是公有的,方便bms调用)
#ifndef WAVE_H
#define WAVE_H
#include <QMainWindow>
#include "save.h"//子界面save
namespace Ui {
class Wave;
}
class Wave : public QMainWindow
{
Q_OBJECT
public:
explicit Wave(QWidget *parent = nullptr);
~Wave();
Save save;//子界面对象(**注意这里是公有的,方便bms调用**)
private slots:
void on_data_clicked();//打开bms界面
void on_save_clicked();//打开save界面
void deal_save_slot();//子界面save信号处理函数
signals:
void open_bms();
};
wave.cpp
#include "wave.h"
#include "ui_wave.h"
Wave::Wave(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Wave)
{
ui->setupUi(this);
/***接收到存储界面发来的信号后执行相应操作***/
connect(&save,&Save::open_wave,this,&Wave::deal_save_slot);//接收到save界面发射来的信号后执行槽函数deal_save_slot()
}
Wave::~Wave()
{
delete ui;
}
/***点击“数显界面”按钮后发射一个信号给BMS界面***/
void Wave::on_data_clicked()
{
emit open_bms();//按下按钮,发射信号
}
/***点击“存储界面”按钮后执行的操作***/
void Wave::on_save_clicked()
{
this->close();
save.show();
save.showMaximized();
}
/***接收到存储界面发来的信号后,执行的槽函数***/
void Wave::deal_save_slot()
{
this->show();
save.close();
}
save.h
#ifndef SAVE_H
#define SAVE_H
#include <QMainWindow>
namespace Ui {
class Save;
}
class Save : public QMainWindow
{
Q_OBJECT
public:
explicit Save(QWidget *parent = nullptr);
~Save();
private slots:
void on_data_clicked();
void on_wave_clicked();
signals:
void open_wave();
void save_open_bms();
};
save.cpp
#include "save.h"
#include "ui_save.h"
Save::Save(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Save)
{
ui->setupUi(this);
}
Save::~Save()
{
delete ui;
}
/***点击“数显界面”按钮后发射一个信号给BMS界面***/
void Save::on_data_clicked()
{
emit save_open_bms();//按下按钮,发射信号
}
/***点击“波形界面”按钮后发射一个信号给BMS界面***/
void Save::on_wave_clicked()
{
emit open_wave();//按下按钮,发射信号
}