4、两个窗体跳转

新建项目,QWidget,取消勾选ui

b1按钮,按下,触发showSecondWin()函数

b2按钮,按下,触发sendSignal()函数(发射MySignal()信号)

子窗体w2,发射的MySignal()信号,触发showMainWin()函数

/*mywidget.h代码*/
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPushButton>//引入按钮
#include "secondwindow.h" //子窗口头文件

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
    void showSecondWin();//自定义的槽函数
    void showMainWin();
private:
    QPushButton b1;//按钮b1
    SecondWindow w2;//子窗体
};

#endif
/*secondwindow.h代码*/
#ifndef SECONDWINDOW_H
#define SECONDWINDOW_H

#include <QWidget>
#include<QPushButton>//引入按钮

class SecondWindow : public QWidget
{
    Q_OBJECT
public:
    SecondWindow(QWidget *parent = nullptr);
    void sendSignal();//自定义的槽函数

signals: //信号必须有signals关键字,信号无返回值,可以有参数
    void MySignal(); //自定义信号

private:
    QPushButton b2;//按钮b2
};

#endif
/*mywidget.cpp代码*/
#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("主窗体");
    resize(400,100); //窗体大小

    b1.setText("打开子窗体");
    b1.setParent(this);//控件b1在MyWidget窗体上
    //b1控件,按下,调用showMainWin()函数
    connect(&b1,&QPushButton::pressed,this,&MyWidget::showMainWin);
    //w2窗体,发送信号,调用showSecondWin()函数
    connect(&w2,&SecondWindow::MySignal,this,&MyWidget::showSecondWin);
}
void MyWidget::showMainWin()//自定义的槽函数
{
    w2.show();//显示子窗体
    this->hide();//隐藏本窗体
}
void MyWidget::showSecondWin()//自定义的函数
{
    this->show();
    w2.hide();

}

MyWidget::~MyWidget()
{

}
/*secondwindow.cpp代码*/
#include "secondwindow.h"

SecondWindow::SecondWindow(QWidget *parent) : QWidget(parent)
{
    setWindowTitle("子窗体");
    resize(400,100); //窗体大小

    b2.setText("返回主窗体");
    b2.setParent(this);//按钮b2在SecondWindow上
    //按下b2,发送信号
    connect(&b2,&QPushButton::pressed,this,&SecondWindow::sendSignal);
}
void SecondWindow::sendSignal()//自定义的槽函数
{
    emit MySignal();//发送信号
}
原文地址:https://www.cnblogs.com/xixixing/p/10897632.html