QT 使用信号与槽实现界面跳转

一、创建一个新的页面

1 > 在原有工程上新建一个页面

2 > 选择Qt - Qt 设计师界面类 - choose

3 > 选择Widget模板 - 下一步

4 > 输入自定义类名 - 下一步

会自动生成其同名的.h .cpp .ui文件

5 > 最终效果

Headers存放.h文件

Soueces存放.cpp文件

Forms存放.ui文件

二、创建连接

1 > 两个界面头文件

/*********************************第一个界面的头文件*********************************/
#ifndef WIDGET_H
#define WIDGET_H


#include <QWidget>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE


class Widget : public QWidget
{
    Q_OBJECT


public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


signals:
    void jump();          //自定义跳转函数


private slots:
    void on_jumpBtn_clicked();


private:
    Ui::Widget *ui;
};
#endif // WIDGET_H




/*********************************第二个界面的头文件*********************************/
#ifndef SECOND_H
#define SECOND_H


#include <QWidget>


namespace Ui {
class Second;
}


class Second : public QWidget
{
    Q_OBJECT


public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();




public slots:
    void jump_slot();    //定义有关处理跳转信号的槽函数


private:
    Ui::Second *ui;
};


#endif // SECOND_H

2 > 源文件

/*********************************第一个界面的源文件*********************************/
#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //信号函数也可以连接信号函数
    //connect(ui->jumpBtn, &QPushButton::clicked, this, &Widget::jump);
}


Widget::~Widget()
{
    delete ui;
}


跳转按钮对应的槽 函数
void Widget::on_jumpBtn_clicked()
{
    //发射跳转信号
    emit jump();    //jump是在头文件中自定义的信号函数

    //关闭当前 界面
    this->hide();
}


/*********************************第二个界面的源文件*********************************/

#include "second.h"
#include "ui_second.h"


Second::Second(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Second)
{
    ui->setupUi(this);
}


Second::~Second()
{
    delete ui;
}


//处理跳转信号函数对应的槽函数
void Second::jump_slot()
{
    this->show();          //将当前界面进行展示
}

3 > 主函数

#include "widget.h"
#include"form.h"   //第二个界面的头文件
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Form f;   //实例化第二个界面

    //将第一个界面的信号函数与第二个界面的槽函数连接
    QObject::connect(&w, &Widget::jump,&f,&Form::jump_slot);

    return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值