【Qt】用QT實現兩個按鈕控制兩個界面的交替出現

【主要思路】

這裏介紹的是主副兩個界面,通過父界面發送信號給主界面,實現其中某一個界面的顯示與隱藏
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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();	//發送信號
}
發佈了34 篇原創文章 · 獲贊 41 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章