QT+创建两个不相干的窗口实现一个显示一个不显示

Posted doker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,不过从另外一种角度考虑,主窗口就是老大,老大只是对下面的信号处理,而下属子窗口不能操控老大主窗口,所以当下属子窗口需要操作老大主窗口时,需要给老大主窗口发送消息,老大主窗口再处理发送过来的消息。全程下来下属子窗口没有操控老大主窗口,都是老大主窗口自己进行信号的处理

以上是关于QT+创建两个不相干的窗口实现一个显示一个不显示的主要内容,如果未能解决你的问题,请参考以下文章

几个ui显示在一个窗口里

Qt的窗口如何显示在spi屏幕上

Qt下创建窗口的问题

Qt中,当QWidget不是作为顶级窗体出现时,怎么让他显示关闭按钮呢

qt两个窗口切换怎么连续性

用 Qt实现三个窗口,一个label,两个button,