欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【Qt】03-页面切换

【Qt】03-页面切换

2025/2/8 2:24:25 来源:https://blog.csdn.net/qq_45640207/article/details/145190094  浏览:    关键词:【Qt】03-页面切换

  • 前言
  • 一、按键实现界面切换
    • 1.1 创建新的类文件
      • 1.1.1 创建
      • 1.1.2 细节选择
    • 1.2 代码以及需要注意的点
      • mywidget.cpp
      • secondwidget.cpp
      • mywidget.h
      • secondwidget.h
    • 1.3 结果展示
  • 二、signal关键字
    • 2.1 代码以及解释
      • mywidget.cpp
      • secondwidget.cpp
      • mywidget.h
      • secondwidget.h
      • 解释
    • 2.2 现象
  • 总结


前言

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_OBJECTpublic: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_OBJECTpublic: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 现象

简单来说就是两个界面的相互丝滑切换。


总结

这篇文章依旧没有总结

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com