Qt的信号与信号槽,两个窗口切换(三)

1.核心原理:图片

2.登录界面与主窗口代码对比(简略,详细代码在后方)

图片

3.源码:

widget.h(主窗口代码)

#ifndef WIDGET_H 
#define WIDGET_H
#include <QWidget>
#include<denglu.h>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    void jm1();//显示主界面的信号槽
    void jm2();//显示登录面的信号槽
private:
    Ui::Widget *ui;
    denglu two;//定义登录界面为two
};
#endif // WIDGET_H

widget.cpp

#include "widget.h" 
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //connect();就是信息连接的工具
    connect(ui->pushButton_denglu,SIGNAL(clicked()),this,SLOT(jm2()));
    //pushButton_denglu触及发出信号,则在这个界面上用槽函数jm2();
    connect(&two,SIGNAL(Mysignal()),this,SLOT(jm1()));
    //如果收到来自登陆界面two的Mysignal()信号,则在这个界面上用槽函数jm1();
}
Widget::~Widget()
{
    delete ui;
}
void Widget::jm2()
{
    two.show();//登录界面显示
    this->hide();//主窗口隐藏
}
void Widget::jm1()
{
    this->show();主窗口显示
}

denglu.h

#ifndef DENGLU_H 
#define DENGLU_H
#include <QMainWindow>
namespace Ui {
class denglu;
}
class denglu : public QMainWindow
{
    Q_OBJECT
public:
    explicit denglu(QWidget *parent = nullptr);
    ~denglu();
public slots:
    void j1();//为了让主窗口显示的槽函数
signals:
    void Mysignal();
private:
    Ui::denglu *ui;
};
#endif // DENGLU_H

denglu.cpp

#include "denglu.h" 
#include "ui_denglu.h"
denglu::denglu(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::denglu)
{
    ui->setupUi(this);
    connect(ui->returnbutton,SIGNAL(clicked()),this,SLOT(j1()));
    //returnbutton触及,在这个界面发出信号触发槽函数j1();
}
denglu::~denglu()
{
    delete ui;
}
void denglu::j1()
{
    emit Mysignal();//发出Mysignal();这个信号
    this->hide();//本窗口隐藏
}

效果:点击登录账户,主窗口隐藏,点击返回,主窗口显示。
图片图片
欢迎交流讨论,如果需要评论邮箱,我发源码工程打包。

发布了54 篇原创文章 · 获赞 55 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/visual_eagle/article/details/105062616