2021-06-14

这篇博客详细介绍了如何在Qt环境中实现BMS、Wave和Save三个界面之间的来回切换。BMS是Wave的父界面,同时也是Save的祖父界面;Wave是Save的父界面。通过槽函数和信号处理,实现了点击按钮在不同界面间的跳转,以及子界面到父界面的返回操作。BMS类中包含了Wave和Save的对象,而Wave和Save类中分别包含了彼此的引用,以便互相调用。
摘要由CSDN通过智能技术生成

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();//按下按钮,发射信号
}

bms界面
wave界面
save界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值