【主要思路】
這裏介紹的是主副兩個界面,通過父界面發送信號給主界面,實現其中某一個界面的顯示與隱藏
mainwidget.h
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
#include <QPushButton>
#include "subwidget.h" //主窗口包含副窗口頭文件
QT_BEGIN_NAMESPACE
namespace Ui { class MainWidget; }
QT_END_NAMESPACE
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget *parent = nullptr);
~MainWidget();
private slots: //定義槽函數
void ChangeWidget();
void dealSub();
private:
Ui::MainWidget *ui;
QPushButton *b3; //定義按鈕指針
SubWidget w; //創建一個子類窗口對象//副窗口對象
};
#endif // MAINWIDGET_H
subwidget.h
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = nullptr);
signals:
/*
* 信號必須有signals關鍵字來聲明
* 信號沒有返回值,但必須有參數
* 信號就是函數的聲明,只需聲明,無需定義
* 使用:emit mysignal();
* */
void mysignal(); //自己定義一個信號用來當我們按下按鈕的時候,副窗口發送一個信號給主窗口
public slots:
void SendSlot(); //槽函數用來處理接收到副窗口發送的信號時,實現界面的隱藏
private:
QPushButton b4; //定義一個按鈕對象
};
#endif // SUBWIDGET_H
mainwidget.cpp
#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QPushButton>
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MainWidget)
{
ui->setupUi(this);
/* &b1:信號發出者,指針類型
* &QPushButton::pressed:處理的信號
* this:信號接收者
* &MainWidget::close:槽函數,信號處理函數
*/
/*自定義槽
* 槽函數需要和信號一致(參數、返回值)
* 由於信號都是沒有返回值,所以槽函數一定沒有返回值
* */
this->setWindowTitle(" 1號窗口"); //設置窗口名稱
this->resize(400,300); //設置窗口大小
b3=new QPushButton(this); //創建按鈕b3對象,並指定父對象
b3->setText("切換到2號窗口"); //設置按鈕名稱
b3->move(150,120); //設置按鈕座標
//當我們點擊按鈕b3時,發出信號released,執行槽函數changewidget
connect(b3,&QPushButton::released,this,&MainWidget::ChangeWidget);
//當我們接收到副界面發送的信號mysignal時,執行槽函數dealSub
connect(&w,&SubWidget::mysignal,this,&MainWidget::dealSub);
}
void MainWidget::ChangeWidget()
{
w.show(); //副界面顯示
this->hide(); //主界面隱藏
}
void MainWidget::dealSub()
{
w.hide();
this->show();
}
MainWidget::~MainWidget()
{
delete ui;
}
subwidget.h
#include "subwidget.h"
SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("2號窗口");
b4.setParent(this);
b4.move(150,120);
b4.setText("切換到1號窗口");
this->resize(400,300);
//當我們按下按鈕b4時,發出信號released,執行槽函數sendslot
connect(&b4,&QPushButton::released,this,&SubWidget::SendSlot);
}
void SubWidget::SendSlot()
{
emit mysignal(); //發送信號
}