目录
前言
本章使用信号与槽机制实现页面跳转
效果展示
一、界面跳转步骤
1. 界面一头文件添加信号
2.界面一cpp文件
按钮槽函数激活信号
void Widget::on_pushButton_clicked() //按钮槽函数
{
this->hide(); //隐藏本界面
emit showWidget1(); //激活信号
}
3.界面二头文件
添加接收信号槽函数
4.界面二cpp文件
槽函数实现显示界面
void widget1::recvWidget()
{
this->show(); //显示本界面
}
5.main.cpp
注意事项:
一定要创建每一个界面对象,使用connect函数将信号和槽函数关联起来,当使用emit激活信号的时候,该信号关联的槽函数就会执行
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
widget1 w1;
QObject::connect(&w,SIGNAL(showWidget1()),&w1,SLOT(recvWidget()));
QObject::connect(&w1,SIGNAL(showWidget()),&w,SLOT(recvW1()));
return a.exec();
}
二、源文件
1.main.cpp
#include "widget.h"
#include "widget1.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
widget1 w1;
QObject::connect(&w,SIGNAL(showWidget1()),&w1,SLOT(recvWidget()));
QObject::connect(&w1,SIGNAL(showWidget()),&w,SLOT(recvW1()));
return a.exec();
}
2.widget.h
#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();
private slots:
void on_pushButton_clicked();
void recvW1();
signals:
void showWidget1();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
3.widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
this->hide();
emit showWidget1();
}
void Widget::recvW1()
{
this->show();
}
4.widget1.h
#ifndef WIDGET1_H
#define WIDGET1_H
#include <QWidget>
namespace Ui {
class widget1;
}
class widget1 : public QWidget
{
Q_OBJECT
public:
explicit widget1(QWidget *parent = nullptr);
~widget1();
private slots:
void on_pushButton_clicked();
void recvWidget();
signals:
void showWidget();
private:
Ui::widget1 *ui;
};
#endif // WIDGET1_H
5.widget1.cpp
#include "widget1.h"
#include "ui_widget1.h"
widget1::widget1(QWidget *parent) :
QWidget(parent),
ui(new Ui::widget1)
{
ui->setupUi(this);
}
widget1::~widget1()
{
delete ui;
}
void widget1::on_pushButton_clicked()
{
this->hide();
emit showWidget();
}
void widget1::recvWidget()
{
this->show(); //显示本界面
}