QT+創建兩個不相干的窗口實現一個顯示一個不顯示


因為兩個窗口互不相干,所以需要重新創建一個窗口類subWidget

subWidget.cpp文件

#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

 

#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();
}

 

#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;
    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::changeWin()
{
    //子窗口顯示,
    w.show();
    //本窗口隱藏
    this ->hide();

}
void MainWidget::dealWin()
{
    //子窗口隱藏
    w.hide();
    //本窗口顯示
    this->show();
}
MainWidget::~MainWidget()
{

}

 利用emit 來進行子窗口信號的傳遞,進而在主窗口中進行信號處理(即子窗口發送一個消息給主窗口,剩下的就交給主窗口進行處理)

之所以用兩個connect來實現這個功能,這是因為在子窗口中不能調用主窗口中創建的對象w,不過從另外一種角度考慮,主窗口就是老大,老大只是對下面的信號處理,而下屬子窗口不能操控老大主窗口,所以當下屬子窗口需要操作老大主窗口時,需要給老大主窗口發送消息,老大主窗口再處理發送過來的消息。全程下來下屬子窗口沒有操控老大主窗口,都是老大主窗口自己進行信號的處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM