【QT】QT的多界面跳转以及界面之间传递参数

QT的多界面跳转以及界面之间传递参数

  • 一、在QT工程中添加新的界面
  • 二、多界面跳转的两种情况
    • 1、A界面跳到B界面,不需要返回
    • 2、A界面跳到B界面,需要返回
      • 1)使用this指针传递将当前界面地址传递给下一界面
      • 2)使用parentWidget函数获取上一级窗口的指针
      • 示例代码:
  • 三、界面之间传递参数(本质上是类跟类之间传递信息)
    • 1、B界面的类中定义了一个公有的方法,通过调用这个公有方法把参数传递过去
    • 2、通过自定义信号来传递参数(发送信号,信号带参数)

一、在QT工程中添加新的界面

右键点击工程名–》选择添加新文件–》QT–》QT设计师界面类–》模板选择MainWindow
详细步骤如下:
1、
在这里插入图片描述
2、
在这里插入图片描述
3、
在这里插入图片描述
4、
在这里插入图片描述
5、
在这里插入图片描述

二、多界面跳转的两种情况

1、A界面跳到B界面,不需要返回

//创建主界面对象
MainWindow *newwin=new MainWindow(); //堆空间
//把主界面显示出来
newwin->show();
//把登录界面关闭 ,与需要返回的差别
this->close();

2、A界面跳到B界面,需要返回

1)使用this指针传递将当前界面地址传递给下一界面

// 创建主界面对象
MainWindow *newwin=new MainWindow(this); //此时必须传递this,原因是返回的时候需要根据这个this找到上一级窗口的地址
qDebug()<<"登录界面的首地址是: "<<this;
//把主界面显示出来
newwin->show();
//把登录界面隐藏--》把登录界面转入系统后台运行
this->hide();

2)使用parentWidget函数获取上一级窗口的指针

QWidget *QWidget::parentWidget() const  返回值:返回上一级窗口的指针原理:当初你跳到下一个界面的时候必须把当前界面的地址传递给下一个界面

示例代码:

// 第二个界面:info_win.cpp
#include "info_win.h"
#include "ui_info_win.h"
#include <QDebug>
#include <QWidget>info_win::info_win(QWidget *parent) :QMainWindow(parent),ui(new Ui::info_win)
{ui->setupUi(this);save_mainwin = parent;qDebug()<<"传递过来的参数是第一个界面的地址:"<<parent;
}info_win::~info_win()
{delete ui;
}
//返回上一级界面按钮的槽函数(第一个界面,登录界面)
void info_win::on_btn_back_clicked()
{//得到上一级界面的地址//思路1:当初创建第二个界面的时候,把第一个界面的地址通过构造函数传递过来//      定义的私有成员save_mainwin就是用来保存传递过来的第一个界面的地址// 显示上级界面
//    save_mainwin->show();//思路2:QT提供了一个函数,叫做parentWidget(),该函数用来返回上一级界面地址QWidget *main_win = this->parentWidget();main_win->show();qDebug()<<"main_win界面地址:"<<main_win;//关闭当前(第二个界面)界面delete this;    // this->close();
}// info_win.h
#ifndef INFO_WIN_H
#define INFO_WIN_H#include <QMainWindow>namespace Ui {
class info_win;
}class info_win : public QMainWindow
{Q_OBJECTpublic:explicit info_win(QWidget *parent = nullptr);~info_win();private slots:void on_btn_back_clicked();private:Ui::info_win *ui;QWidget *save_mainwin;
};#endif // INFO_WIN_H

三、界面之间传递参数(本质上是类跟类之间传递信息)

A界面传递参数给B界面(A是第一个界面,B是第二个界面)

1、B界面的类中定义了一个公有的方法,通过调用这个公有方法把参数传递过去

// A界面

// 第一个界面:// mainwindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "info_win.h"
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
// 登录按钮的槽函数
void MainWindow::on_pushButton_clicked()
{// 获取输入的用户名和密码QString account = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(account == "aaa" && pswd == "123"){//创建第二个界面对象,必须传递this指针(把第一个界面的地址传给第二个界面)info_win *info_w = new info_win(this);// 将第一个界面的账号和密码传递给第二个界面info_w->getMsg(account, pswd);qDebug()<<"第一界面的地址是"<<this;// 显示第二个界面info_w->show();//隐藏第一个界面/*隐藏:把界面转入到系统后台运行,这个界面对象依然存在关闭:界面释放掉,对象不存在了*/this->hide();}else{qDebug()<<"账号或密码错误,重新输入";}
}

// B 界面

// 第二个界面
// info_win.h
#ifndef INFO_WIN_H
#define INFO_WIN_H#include <QMainWindow>namespace Ui {
class info_win;
}class info_win : public QMainWindow
{Q_OBJECTpublic:explicit info_win(QWidget *parent = nullptr);~info_win();void getMsg(QString account, QString pswd);private slots:void on_btn_back_clicked();private:Ui::info_win *ui;QWidget *save_mainwin;QString main_account;QString main_pswd;
};#endif // INFO_WIN_H// info_win.cpp
#include "info_win.h"
#include "ui_info_win.h"
#include <QDebug>
#include <QWidget>info_win::info_win(QWidget *parent) :QMainWindow(parent),ui(new Ui::info_win)
{ui->setupUi(this);save_mainwin = parent;qDebug()<<"传递过来的参数是第一个界面的地址:"<<parent;
}info_win::~info_win()
{delete ui;
}
// 获取第一个界面的账号和密码
void info_win::getMsg(QString account, QString pswd)
{main_account = account;main_pswd = pswd;qDebug()<<"第一个界面传递过来的账号和密码:"<<main_account<<"  "<<main_pswd;
}
//返回上一级界面按钮的槽函数(第一个界面,登录界面)
void info_win::on_btn_back_clicked()
{//得到上一级界面的地址//思路1:当初创建第二个界面的时候,把第一个界面的地址通过构造函数传递过来//      定义的私有成员save_mainwin就是用来保存传递过来的第一个界面的地址// 显示上级界面
//    save_mainwin->show();//思路2:QT提供了一个函数,叫做parentWidget(),该函数用来返回上一级界面地址QWidget *main_win = this->parentWidget();main_win->show();qDebug()<<"main_win界面地址:"<<main_win;//关闭当前(第二个界面)界面delete this;    // this->close();
}

2、通过自定义信号来传递参数(发送信号,信号带参数)

// 第一个界面:
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();signals: //自定义信号void sendSign(QString, QString);private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "info_win.h"
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
// 登录按钮的槽函数
void MainWindow::on_pushButton_clicked()
{// 获取输入的用户名和密码QString account = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(account == "aaa" && pswd == "123"){//创建第二个界面对象,必须传递this指针(把第一个界面的地址传给第二个界面)info_win *info_w = new info_win(this);// 将第一个界面的账号和密码传递给第二个界面 --信号发送connect(this, SIGNAL(sendSign(QString, QString)), info_w, SLOT(recvSlot(QString, QString)));emit sendSign(account, pswd);qDebug()<<"第一界面的地址是"<<this;// 显示第二个界面info_w->show();this->hide();}else{qDebug()<<"账号或密码错误,重新输入";}
}
// 第二个界面:
// info_win.h
#ifndef INFO_WIN_H
#define INFO_WIN_H#include <QMainWindow>namespace Ui {
class info_win;
}class info_win : public QMainWindow
{Q_OBJECTpublic:explicit info_win(QWidget *parent = nullptr);~info_win();//void getMsg(QString account, QString pswd);private slots:void on_btn_back_clicked();void recvSlot(QString account, QString pswd);private:Ui::info_win *ui;QWidget *save_mainwin;QString main_account;QString main_pswd;
};#endif // INFO_WIN_H// info_win.cpp
#include "info_win.h"
#include "ui_info_win.h"
#include <QDebug>
#include <QWidget>info_win::info_win(QWidget *parent) :QMainWindow(parent),ui(new Ui::info_win)
{ui->setupUi(this);save_mainwin = parent;qDebug()<<"传递过来的参数是第一个界面的地址:"<<parent;
}info_win::~info_win()
{delete ui;
}//返回上一级界面按钮的槽函数(第一个界面,登录界面)
void info_win::on_btn_back_clicked()
{//得到上一级界面的地址//思路1:当初创建第二个界面的时候,把第一个界面的地址通过构造函数传递过来//      定义的私有成员save_mainwin就是用来保存传递过来的第一个界面的地址// 显示上级界面
//    save_mainwin->show();//思路2:QT提供了一个函数,叫做parentWidget(),该函数用来返回上一级界面地址QWidget *main_win = this->parentWidget();main_win->show();qDebug()<<"main_win界面地址:"<<main_win;//关闭当前(第二个界面)界面delete this;    // this->close();
}void info_win::recvSlot(QString account, QString pswd)
{qDebug()<<"通过信号传递过来的参数"<<account<<"  "<<pswd;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75278.shtml

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

相关文章

【力扣hot100题】(022)反转链表

非常经典&#xff0c;我写的比较复杂&#xff0c;一直以来的思路都是这样&#xff0c;就没有去找更简单的解法&#xff1a;&#xff08;做链表题习惯加头结点的前置节点了&#xff0c;去掉也行&#xff09; /*** Definition for singly-linked list.* struct ListNode {* …

剑指Offer(数据结构与算法面试题精讲)C++版——day2

剑指Offer(数据结构与算法面试题精讲)C++版——day2 题目一:只出现一次的数据题目二:单词长度的最大乘积题目三:排序数组中的两个数字之和题目一:只出现一次的数据 一种很简单的思路是,使用数组存储出现过的元素,比如如果0出现过,那么arr[0]=1,但是有个问题,题目中没…

【C++游戏引擎开发】《线性代数》(3):矩阵乘法的SIMD优化与转置加速

一、矩阵乘法数学原理与性能瓶颈 1.1 数学原理 矩阵乘法定义为:给定两个矩阵 A ( m n ) \mathrm{A}(mn) A(mn)和 B ( n p ) \mathrm{B}(np) B(np),它们的乘积 C = A B \mathrm{C}=AB C=AB 是一个 m p \mathrm{m}p mp 的矩阵,其中: C i , j = ∑ k = 1…

Vue Transition组件类名+TailwindCSS

#本文教学结合TailwindCSS实现一个Transition动画的例子# 举例代码&#xff1a; <transition enter-active-class"transition-all duration-300 ease-out"enter-from-class"opacity-0 translate-y-[-10px]"enter-to-class"opacity-100 translate-…

技术回顾day2

1.获取文件列表 流程&#xff1a;前端根据查询条件封装查询信息&#xff0c;后端接收后进行封装&#xff0c;封装为FileInfoQuery,根据fileInfoQuery使用mybatis的动态sql来进行查询。 2.文件分片上传 每次上传需要上传包括(文件名字&#xff0c;文件&#xff0c;md5值&#…

DeepSeek-R1 模型现已在亚马逊云科技上提供

2025年3月10日更新—DeepSeek-R1现已作为完全托管的无服务器模型在Amazon Bedrock上提供。 2025年2月5日更新—DeepSeek-R1 Distill Llama 和 Qwen模型现已在Amazon Bedrock Marketplace和Amazon SageMaker JumpStart中提供。 在最近的Amazon re:Invent大会上&#xff0c;亚马…

STP --- 生成树协议

协议信息 配置 BPDU Protocol identifier&#xff1a;协议标识 Version&#xff1a;协议版本&#xff1a;STP 为 0&#xff0c;RSTP 为 2&#xff0c;MSTP 为 3 type&#xff1a; BPDU 类型 Flag&#xff1a; 标志位 Root ID&#xff1a; 根桥 ID&#xff0c;由两字节的优…

Ansible playbook-ansible剧本

一.playbook介绍 便于功能的重复使用 本质上就是文本文件&#xff0c;一般都是以.yml结尾的文本文件。 1.遵循YAML语法 1.要求同级别代码要有相同缩进&#xff0c;建议4个空格。【同级别代码是同一逻辑的代码】 在计算机看来空格和Tob键是两个不同的字符。 2.一个键对应一…

python的基础入门

初识Python 什么是Python Python是1门程序设计语言。在开发者眼里&#xff0c;语言可以分为3类&#xff1a; 自然语言&#xff1a;人能听懂的语言&#xff0c;例如汉语&#xff0c;英语&#xff0c;法语等等。机器语言&#xff1a;机器能听懂的语言&#xff0c;机器只能听懂0…

MD编辑器中的段落缩进怎么操作

在 Markdown&#xff08;MD&#xff09;编辑器中&#xff0c;段落的缩进通常可以通过 HTML 空格符、Markdown 列表缩进、代码块缩进等方式 实现。以下是几种常见的段落缩进方法&#xff1a; 1. 使用全角空格 ( ) 在一些 Markdown 编辑器&#xff08;如 Typora&#xff09;中&…

8.neo4j图数据库python操作

使用图数据库的原因 图数据库使用neo4j的原因&#xff1a;neo4j使用率高&#xff0c;模板好找&#xff0c;报错能查。 红楼梦人物关系图地址 GraphNavigator neo4j学习手册 https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html CQL代表的是Cypher查询语言…

[Lc6_记忆化搜索] 扫雷游戏 | 理解 递归vs记忆化搜索vs dp

目录 ⭕1.扫雷游戏 题解 1.记忆化搜索 解法一&#xff1a;递归 解法二&#xff1a;记忆化搜索 解法三&#xff1a;动态规划 ⭕1.扫雷游戏 (暴力模拟&#xff09; 链接&#xff1a;529. 扫雷游戏 让我们一起来玩扫雷游戏&#xff01; 给你一个大小为 m x n 二维字符矩阵…

云原生周刊:Kubernetes v1.33 要来了

开源项目推荐 Tekton Tekton 是一个开源的 K8s 原生 CI/CD 系统&#xff0c;它为构建、测试和部署自动化工作流提供了强大而灵活的框架。Tekton 提供了一套标准化的 API 和自定义资源&#xff08;CRDs&#xff09;&#xff0c;使得开发者能够在 K8s 集群中定义和管理 CI/CD 管…

服务新增节点、迁移笔记

文章目录 基础配置部分基础配置-hosts基础配置-jdk包准备基础配置-jdk环境变量配置基础配置-skywalking包 基础配置-apollo配置。 # 文件夹及配置基础配置-tomcat基础配置-nginx基础配置部分-磁盘挂载(这个也差点漏掉)。 防火墙部分防火墙部分-数据库及脚本防火墙部分-redis防火…

第十一章:Python PIL库-图像处理

一、PIL库简介 PIL&#xff08;Python Imaging Library&#xff09;是一个功能强大的图像处理库&#xff0c;它提供了丰富的图像处理功能&#xff0c;包括图像的打开、处理和保存等操作。PIL支持多种图像文件格式&#xff0c;如JPEG、PNG、BMP等&#xff0c;并且可以完成对图像…

【编译、链接与构建详解】Makefile 与 CMakeLists 的作用

【编译、链接与构建详解】Makefile 与 CMakeLists 的作用 前言源代码&#xff08;.c、.cpp&#xff09;编译编译的本质编辑的结果编译器&#xff08;GCC、G、NVCC 等&#xff09; 目标文件&#xff08;.o&#xff09;什么是 .o 目标文件为什么单个 .o 目标文件不能直接执行&…

Ubuntu / Debian 创建快捷方式启动提权

简述 在 Linux 系统中&#xff0c;.desktop 文件是 桌面入口文件&#xff0c;用于在桌面环境&#xff08;如 GNOME、KDE&#xff09;中定义应用程序的启动方式、图标、名称等信息。当你执行 touch idea.desktop 时&#xff0c;实际上创建了一个空的 .desktop 文件&#xff08;…

ISIS报文

IS-IS 报文 目录 IS-IS 报文 一、报文类型与功能 二、报文结构解析 三、核心功能特性 四、典型应用场景 五、抓包数据分析 六、总结 IS-IS&#xff08;中间系统到中间系统&#xff09;协议报文是用于链路状态路由协议中网络设备间交换路由信息的关键载体&#xff0c;其设…

beikeshop多商户跨境电商独立站最新版v1.6.0版本源码

一.介绍 beikeshop跨境电商独立站最新版V1.6.0源码 多商户 多商家 多语言 多币结算 本博主亲测搭建代码全开源质量相对来说很稳定的 二.服务器环境 系统&#xff1a;CentOS、 环境&#xff1a;PHP7.4 Nginx 1.21 MySQL 5.6 常见插件&#xff1a;fileinfo &#xff1b; re…

Redis批量操作详解

一、原生批量命令&#xff08;MSET&#xff09; 适用场景&#xff1a;所有键的过期时间相同或无过期设置&#xff0c;且无需条件判断。 方法&#xff1a; 将多个SET命令合并为MSET命令&#xff0c;但需要注意MSET的局限性&#xff08;无法设置过期时间&#xff0c;且所有键值对…