Qt 界面之间的切换

        本次内容将通过按钮的点击实现延时300ms并在“开始界面”和“新界面”两个界面之间进行切换。内容关于指针的创建与释放;场景的实例化;信号的发送;延迟时间;界面的隐藏与显示;信号与槽的连接。

① widget的h文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "newwidget.h"

class Widget : public QWidget
{
    Q_OBJECT

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

    // 创建场景对象
    NewWidget * newWidget = NULL;
};
#endif // WIDGET_H

② widget的cpp文件:

#include "widget.h"
#include <QPushButton>
#include <QFont>
#include <QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    // 主场景配置
    setFixedSize(400,200);  // 设置固定大小
    // 设置 标题
    setWindowTitle("开始界面");

    // 下一页(nextBtn) 按钮
    QPushButton * nextBtn = new QPushButton;
    nextBtn->setParent(this);
    nextBtn->setFixedSize(220,60);
    nextBtn->move( this->width() - nextBtn->width() , this->height() - nextBtn->height());
    nextBtn->setText("下一页");          // 设置按钮名
    // 设置字体
    QFont font2 = nextBtn->font();
    font2.setPointSize(20);
    nextBtn->setFont(font2);

    // 实例化 参数设置场景
    newWidget = new NewWidget;

    // 监听新界面-->点击返回按钮的信号
    connect(newWidget,&NewWidget::clickBack,this,[=](){
        // 设置下一场景的位置为当前位置
        this->setGeometry(newWidget->geometry());

        newWidget->hide();    // 隐藏新页面
        this->show();   // 显示主场景页面
    });

    // 点击下一页按钮 -----> 进入新场景
    connect(nextBtn,&QPushButton::clicked,[=](){
        // 延时 300ms ----> 进入选择关卡场景
        QTimer::singleShot(300,this,[=](){
            newWidget->setGeometry(this->geometry());     // 设置下一场景的位置为当前位置

            this->hide();    // 隐藏选择关卡页面
            newWidget->show();   // 显示主场景页面
            });
    });
}

Widget::~Widget()
{
}

NewWidget是一个QWidget类:

③ newwidget的h文件:

#ifndef NEWWIDGET_H
#define NEWWIDGET_H

#include <QWidget>

class NewWidget : public QWidget
{
    Q_OBJECT
public:
    explicit NewWidget(QWidget *parent = nullptr);

signals:
    // 写一个自定义信号,告诉主场景  点击了返回按钮
    void clickBack(); // 自定义信号只需要声明,不需要实现
};

#endif // NEWWIDGET_H

④ newwidget的cpp文件:

#include "newwidget.h"
#include <QPushButton>
#include <QFont>
#include <QTimer>

NewWidget::NewWidget(QWidget *parent) : QWidget(parent)
{
    // 配置 参数设置场景
    this->setFixedSize(400,200);  // 设置固定大小
    // 设置 标题
    this->setWindowTitle("新界面");

    // 字体设置
    QFont font1("Microsoft YaHei", 13, 50, false);

    // 返回(backBtn) 按钮
    QPushButton * backBtn = new QPushButton(this);
    backBtn->setFixedSize(100,40);
    backBtn->move( this->width() - backBtn->width() , this->height() - backBtn->height());
    backBtn->setText("返 回");
    backBtn->setFont(font1);
    // 点击 返回 按钮
    connect(backBtn,&QPushButton::clicked,[=](){
        // 告诉主场景,点击返回了 <----- 主场景监听返回按钮
        // 延时 ----> 发送信号
        QTimer::singleShot(300,this,[=](){
             emit this->clickBack();   // 发送 点击返回按钮 信号
            });
    });
}

猜你喜欢

转载自blog.csdn.net/weixin_58351753/article/details/127659272
今日推荐