QT实现界面切换简摘
首先创建出一个QWidget界面(不带菜单栏、状态栏,如果想要实现可以手动添加,或者直接添加QMainWindow),然后在项目文件夹右键添加文件->Qt->设计师界面类->选择Widget(道理同上)->重命名,将其命名为second
这样会产生如下的文件:
为了便于区分两个界面,笔者进行了页面颜色的更改,读者只需理解原理即可,可根据喜好自由调节!!!
在第一个界面添加pushbutton按钮,为其objectName更名为toSecondBtn
在第二个界面添加pushbutton按钮,为其objectName更名为toFirstBtn
second.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();
//添加的内容从这里开始~~
signals:
void toFirst();
//添加的内容到这里结束~~
private:
Ui::second *ui;
};
#endif // SECOND_H
second.cpp
#include "second.h"
#include "ui_second.h"
second::second(QWidget *parent) :
QWidget(parent),
ui(new Ui::second)
{
ui->setupUi(this);
//添加的内容从这里开始~~
connect(ui->to_first_btn,&QPushButton::clicked,this,&second::toFirst);
//添加的内容到这里结束~~
}
second::~second()
{
delete ui;
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
//添加的代码从这里开始~~
#include"second.h"
//添加的代码到这里结束~~
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//添加的代码从这里开始~~
public:
second second;
void showSecond();
void showFirst();
//添加的代码到这里结束~~
private:
Ui::Widget *ui;
};
#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(ui->toSecondBtn,&QPushButton::clicked,this,&Widget::showSecond);
connect(&second,&second::toFirst,this,&Widget::showFirst);
//添加的代码到这里结束~~
}
Widget::~Widget()
{
delete ui;
}
//添加的代码从这里开始~~
void Widget::showSecond()
{
this->hide();
second.show();
}
void Widget::showFirst()
{
this->show();
second.close();
}
//添加的代码到这里结束~~
会有人好奇,为什么不能在second直接定义一个函数,通过该函数实现second的关闭和widget的显示,因为你是在widget中进行了对于second的实例化,导致widget的显示、关闭等行为只能由widget自己实现,second不能进行越级关闭,就像是公司中上下级关系,widget是领导,second是下级