本次内容将通过按钮的点击实现延时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(); // 发送 点击返回按钮 信号
});
});
}