【Qt】03-页面切换

devtools/2025/1/17 22:12:11/

  • 前言
  • 一、按键实现界面切换
    • 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 现象
  • 三、有参数的信号
    • 3.1 示例代码
  • 总结


前言

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

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

三、有参数的信号

信号是可以重载的。
信号是给槽函数传参的。

3.1 示例代码

首先先声明了带参数的信号,
在这里插入图片描述
发送信号
在这里插入图片描述
接收信号
在这里插入图片描述

调试打印,需要注意是qDebug()的写法。
在这里插入图片描述

在这里插入图片描述
能用就行。
在这里插入图片描述


总结

这篇文章依旧没有总结


http://www.ppmy.cn/devtools/151372.html

相关文章

软考信安20~数据库系统安全

1、数据库安全概况 1.1、数据库安全概念 数据库是网络信息系统的基础性软件,承载着各种各样的数据,成为应用系统的支撑平台。 国外主流的数据库系统有MSSQL 、MySQL 、Oracle 、DB2 等,国产数据库系统主要有人大金仓、达梦等。 1.2、数据库安全威胁 授权的误用(Misuses…

C# OpenCV机器视觉:二维码识别

在一个风平浪静却又暗藏玄机的午后&#xff0c;阿辉正坐在他那堆满各种电子元件和代码书籍的办公桌前&#xff0c;对着电脑屏幕上那一串串神秘的代码发呆。突然&#xff0c;手机铃声如同一道尖锐的闪电划破了平静的空气&#xff0c;吓得他差点把手里的咖啡杯打翻。原来是公司的…

LeetCode 916. Word Subsets

&#x1f517; https://leetcode.com/problems/word-subsets 题目 给两个字符串数组&#xff0c;word1 和 word2若每一个 word2 中的字符串&#xff0c;都是字符串 x 的 subset&#xff0c;则表示该字符串 x 是 universal 的返回 word1 中的 universal 的字符串 思路 对 wo…

晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

阿里云无影云电脑的使用场景

阿里云无影云电脑是一种安全、高效的云上虚拟桌面服务&#xff0c;广泛应用于多种场景&#xff0c;包括教育、企业办公、设计与视频制作、客服中心等。以下是九河云总结的无影云电脑的几个典型使用场景&#xff1a; #### 1. 教育机构 - **业务痛点**&#xff1a; - 学生实践操…

thinkphp 5.0 结合redis 做延迟队列,队列无法被消费

目录 一、Linux 环境下 二、如何验证消息队列被正确监听 一、Linux 环境下 项目部署在Linux 环境下&#xff0c;首先找到项目的部署路径&#xff0c;接着输入命令,这个命令是以守护进程方式进行监听你的队列&#xff0c;只要redis 不关闭 就可以一直监听这个队列 nohup php …

安装指南:LLaMA Factory、AutoGPTQ 和 vllm

安装指南&#xff1a;LLaMA Factory、AutoGPTQ 和 vllm 在本文中&#xff0c;我们将详细介绍如何安装 LLaMA Factory、AutoGPTQ 和 vllm&#xff0c;这些工具在大型语言模型&#xff08;LLMs&#xff09;和视觉语言模型&#xff08;VLMs&#xff09;的微调和量化中非常有用。我…

【Hive】海量数据存储利器之Hive库原理初探

文章目录 一、背景二、数据仓库2.1 数据仓库概念2.2 数据仓库分层架构2.2.1 数仓分层思想和标准2.2.2 阿里巴巴数仓3层架构2.2.3 ETL和ELT2.2.4 为什么要分层 2.3 数据仓库特征2.3.1 面向主题性2.3.2 集成性2.3.3 非易失性2.3.4 时变性 三、hive库3.1 hive概述3.2 hive架构3.2.…