【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 现象
  • 三、有参数的信号
    • 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.rhkb.cn/news/2964.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件授权管理中的软件激活向导示例

软件激活向导示例 在软件许可中&#xff0c;提供许可应该是简单和安全的。这适用于想要在中央许可证服务器上创建新许可证的软件开发人员&#xff0c;也适用于需要在其设备上获得许可证的最终用户。如果所讨论的系统有互联网连接&#xff0c;或是暂时的连接&#xff0c;就可以…

02JavaWeb——JavaScript-Vue(项目实战)

一、JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习 JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过JS/js效果演示提供资料进行效果演…

【java】java入门

盘符名称冒号---------盘符切换 dir---------------查看当前路径下的内容 cd目录--------进入单级目录 cd..----------回退到上一级目录 cd \----------回退到盘符目录 cls----------清屏 exit 为什么要配环境变量&#xff1f; 在任意的目录下都可以打开指定的软件。把软件的路…

利用爬虫获取某学习软件的考试题库(带源码)

首先要重新进行账号的登陆用来获取cookie 按下F12在控制台输入&#xff1a; // 获取当前页面的 cookies var cookies document.cookie.split(";");// 创建一个数组来存储 cookies 对象 var cookieArray [];// 遍历每个 cookie 并将其转换为对象 cookies.forEach(f…

【C++篇】红黑树的实现

目录 前言&#xff1a; 一&#xff0c;红黑树的概念 1.1&#xff0c;红黑树的规则 1.2&#xff0c;红黑树的最长路径 1.3&#xff0c;红黑树的效率分析 二&#xff0c;红黑树的实现 2.1&#xff0c;红黑树的结构 2.2&#xff0c;红黑树的插入 2.2.1&#xff0c;大致过程…

Autodl转发端口,在本地机器上运行Autodl服务器中的ipynb文件

通过 SSH 隧道将远程端口转发到本地机器 输入服务器示例的SSH指令和密码&#xff0c;将远程的6006端口代理到本地 在服务器终端&#xff0c;激活conda虚拟环境 conda activate posecnnexport PYOPENGL_PLATFORMegljupyter notebook --no-browser --port6006 --allow-root从…

镭速大文件传输视频文件预览实现原理

镭速可以支持视频预览&#xff0c;在测试过程中需要大量不同格式的视频&#xff0c;如果直接去找各种格式的视频不太现实&#xff0c;所以就会用到一个视频格式转换的工具ffmpeg&#xff0c;本文将介绍ffmpeg的基本使用方法。FFmpeg 是一个免费开源的音视频处理工具&#xff0c…

达梦8-DMSQL程序设计学习笔记1-DMSQL程序简介

1、DMSQL程序简介 DMSQL程序是达梦数据库对标准SQL语言的扩展&#xff0c;是一种过程化SQL语言。在DMSQL程序中&#xff0c;包括一整套数据类型、条件结构、循环结构和异常处理结构等&#xff0c;DMSQL程序中可以执行SQL语句&#xff0c;SQL语句中也可以使用DMSQL函数。 DMSQ…

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中&#xff0c;字体的选择和使用对最终作品的质量有着重要影响。然而&#xff0c;有时我们可能会遇到包含未知字体的PDF文件&#xff0c;这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题&#xff0c;让我们能够更好地处理这些文件。…

git操作(Windows中GitHub)

使用git控制GitHub中的仓库版本&#xff0c;并在Windows桌面中创建与修改代码&#xff0c;与GitHub仓库进行同步。 创建自己的GitHub仓库 创建一个gen_code实验性仓库用来学习和验证git在Windows下的使用方法&#xff1a; gen_code仓库 注意&#xff0c;创建仓库时不要设置…

thinkphp6 + redis实现大数据导出excel超时或内存溢出问题解决方案

redis下载安装&#xff08;window版本&#xff09; 参考地址&#xff1a;https://blog.csdn.net/Ci1693840306/article/details/144214215 php安装redis扩展 参考链接&#xff1a;https://blog.csdn.net/jianchenn/article/details/106144313 解决思路&#xff1a;&#xff0…

设计模式-工厂模式/抽象工厂模式

工厂模式 定义 定义一个创建对象的接口&#xff0c;让子类决定实列化哪一个类&#xff0c;工厂模式使一个类的实例化延迟到其子类&#xff1b; 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中&#xff0c;核心工厂类不在负责产品的创建&#xff0c;而是将具体的创建工作…

学习threejs,使用OrbitControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.OrbitControls 相机控…

Linux:认识Shell、Linux用户和权限

谈起Linux&#xff0c;一般是在说区别于Windows的Linux操作系统&#xff0c;而Linux刚开始用来指Linux内核。值得一提的是&#xff0c;安卓底层也是Linux内核&#xff0c;而安卓系统又是区别于Linux的操作系统。 目录 一、Shell 为什么会有Shell 什么是Shell Shell相关具体…

HCIP-VLAN-hybrid接口+DHCP实验

1.拓扑及实验需求 2.需求分析 需要用到的技术 1、虚拟局域网&#xff08;VLAN&#xff09; 2、动态主机配置协议&#xff08;DHCP&#xff09; 3、单臂路由 首先先完成交换部分&#xff0c;创建对应的vlan将PC1与PC3划入vlan2且接口类型为access&#xff0c;而以外的PC都划…

【Redis】Redis 集群中节点之间如何通信?

【Redis】Redis 集群中节点之间如何通信&#xff1f; 一背景概述二通信协议Gossip 协议 三通信机制Gossip 消息类型(1).Ping消息(2).Pong消息(3).Meet消息(4).Fail消息 消息传播模式(1).反熵(Anti-entropy)(2).谣言传播(Rumor mongering) 四通信过程通信端口通信频率故障检测与…

《Keras 3 在 TPU 上的肺炎分类》

Keras 3 在 TPU 上的肺炎分类 作者&#xff1a;Amy MiHyun Jang创建日期&#xff1a;2020/07/28最后修改时间&#xff1a;2024/02/12描述&#xff1a;TPU 上的医学图像分类。 &#xff08;i&#xff09; 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 简介 设置 本教程将介…

计算机网络 (42)远程终端协议TELNET

前言 Telnet&#xff08;Telecommunication Network Protocol&#xff09;是一种网络协议&#xff0c;属于TCP/IP协议族&#xff0c;主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议&#xff0c;它允许用户通过终端仿真器连接到远程主机&#xff0c;并在远程…

微服务拆分

微服务拆分 接下来&#xff0c;我们就一起将黑马商城这个单体项目拆分为微服务项目&#xff0c;并解决其中出现的各种问题。 熟悉黑马商城 首先&#xff0c;我们需要熟悉黑马商城项目的基本结构&#xff1a; 大家可以直接启动该项目&#xff0c;测试效果。不过&#xff0c…

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程》全新上线了&#xff0c;欢迎广大GISer朋友关注&#xff0c;一起探索GIS奥秘&#xff0c;分享GIS价值&#xff01; 本专栏以实战案例的形式&#xff0c;深入浅出地介绍了GRASS GIS的基本使用方法&#xff0c;用一个个实例讲…