自学内容网 自学内容网

【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关键字

  1. 信号必须由signal关键字来声明。
  2. 信号没有返回值,但可以有参数。
  3. 信号就是函数的声明,只需声明,无需定义。

使用方法: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)!