【Qt】03-页面切换
前言
1、介绍如何实现点击按键切换到下一个子界面。
2、介绍了信号signal的使用。
一、按键实现界面切换
1.1 创建新的类文件
1.1.1 创建
1.1.2 细节选择
接下来选择下一步即可,创建成功。
1.2 代码以及需要注意的点
依旧main.cpp不做修改
mywidget.cpp
#include "mywidget.h"
#include <QPushButton>
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
button1.setParent(this);
button1.setText("colse1");
button1.move(100,100);
button2 = new QPushButton(this); // 指针动态分配空间
button2->setText("点击我");
button2->move(300,100);
button3 = new QPushButton(this);
button3->setText("请点击我");
button3->move(300,128);
connect(&button1,&QPushButton::pressed,this,&MyWidget::close);
connect(button2,&QPushButton::released,this,&MyWidget::mySolt);
connect(button3,&QPushButton::released,&button1,&MyWidget::hide);
setWindowTitle("页面1"); // 等价于this->setWindowTitle("页面1");
resize(500,300); // 设定一个较为美观的大小
button4.setParent(this);
button4.setText("切换到页面2");
button4.move(200,100);
connect(&button4,&QPushButton::released,this,&MyWidget::changeWin);
}
void MyWidget::mySolt()
{
button2->setText("hello");
}
void MyWidget::changeWin()
{
// 页面2显示,页面1隐藏
w1.resize(500,300);
w1.show();
this->hide();
}
// 析构函数
MyWidget::~MyWidget()
{
}
secondwidget.cpp
#include "secondwidget.h"
SecondWidget::SecondWidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("页面2");
button5.setParent(this); // 创建联系
button5.setText("切换到页面1");
}
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QPushButton>
#include "secondwidget.h" // 包含子窗口头文件
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
void mySolt();
void changeWin();
private:
QPushButton button1;
QPushButton *button2; // 指针
QPushButton *button3;
QPushButton button4;
SecondWidget w1; // 子界面
};
#endif // MYWIDGET_H
secondwidget.h
#ifndef SECONDWIDGET_H
#define SECONDWIDGET_H
#include <QWidget>
#include <QPushButton>
class SecondWidget : public QWidget
{
Q_OBJECT
public:
explicit SecondWidget(QWidget *parent = nullptr);
signals:
public slots:
private:
QPushButton button5;
};
#endif // SECONDWIDGET_H
需要注意的
1.3 结果展示
点击按键之后切换至
尚未设置能够返回去的。
二、signal关键字
- 信号必须由signal关键字来声明。
- 信号没有返回值,但可以有参数。
- 信号就是函数的声明,只需声明,无需定义。
使用方法:emit mySignal();
2.1 代码以及解释
主程序不做修改
mywidget.cpp
#include "mywidget.h"
#include <QPushButton>
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
button1.setParent(this);
button1.setText("colse1");
button1.move(100,100);
button2 = new QPushButton(this); // 指针动态分配空间
button2->setText("点击我");
button2->move(300,100);
button3 = new QPushButton(this);
button3->setText("请点击我");
button3->move(300,128);
connect(&button1,&QPushButton::pressed,this,&MyWidget::close);
connect(button2,&QPushButton::released,this,&MyWidget::mySolt);
connect(button3,&QPushButton::released,&button1,&MyWidget::hide);
setWindowTitle("页面1"); // 等价于this->setWindowTitle("页面1");
resize(500,300);
button4.setParent(this);
button4.setText("切换到页面2");
button4.move(200,100);
connect(&button4,&QPushButton::released,this,&MyWidget::changeWin);
// 处理页面2的信号
connect(&w1,&SecondWidget::mySignal,this,&MyWidget::dealSub);
}
void MyWidget::mySolt()
{
button2->setText("hello");
}
void MyWidget::changeWin()
{
// 页面2显示,页面1隐藏
w1.resize(500,300);
w1.show();
this->hide();
}
void MyWidget::dealSub()
{
// 页面2显示,页面1隐藏
w1.resize(500,300);
this->show();
w1.hide();
}
// 析构函数
MyWidget::~MyWidget()
{
}
secondwidget.cpp
#include "secondwidget.h"
SecondWidget::SecondWidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("页面2");
button5.setParent(this); // 创建联系
button5.setText("切换到页面1");
connect(&button5,&QPushButton::clicked,this,&SecondWidget::sendSlot);
}
void SecondWidget::sendSlot()
{
emit mySignal(); // 发送信号
}
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QPushButton>
#include "secondwidget.h" // 包含子窗口头文件
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
void mySolt();
void changeWin(); // 改变页面
void dealSub(); // 处理页面2的信号
private:
QPushButton button1;
QPushButton *button2; // 指针
QPushButton *button3;
QPushButton button4;
SecondWidget w1; // 子界面
};
#endif // MYWIDGET_H
secondwidget.h
#ifndef SECONDWIDGET_H
#define SECONDWIDGET_H
#include <QWidget>
#include <QPushButton>
class SecondWidget : public QWidget
{
Q_OBJECT
public:
explicit SecondWidget(QWidget *parent = nullptr);
// 按键发送的槽函数
void sendSlot();
signals:
void mySignal();
public slots:
private:
QPushButton button5;
};
#endif // SECONDWIDGET_H
解释
首先要了解整体思路,就是页面2的button5按下就会发送一个信号,页面1接收到信号就会做出相应的反应(槽函数)
首先了解如何创建一个信号
然后有了信号了,就要知道如何使用。总体来说,就是emit mySignal();
有发送,自然需要处理接收者。
2.2 现象
简单来说就是两个界面的相互丝滑切换。
总结
这篇文章依旧没有总结
原文地址:https://blog.csdn.net/qq_45640207/article/details/145190094
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!