QT通过parentWidget()实现多界面跳转及关闭(切换界面和返回前一界面)

2023-11-08

QT通过parentWidget()实现多界面跳转及关闭(切换界面和返回前一界面):

不需要跳转界面相互包含头文件,超简单的方法。
先将第一级的窗口this指针传给次级的的窗口,子窗口通过parentWidget(),返回第一级的this并用来调用show

//传递主界面的this指针给跳转界面
new_widget *win = new new_widget(this);
//调用parentWidget()返回上一界面的this指针,并显示
this->parentWidget()->show(); 

搞定,就这么简单,下面是详细过程。

1. 创建新界面

	在创建好QT工程后,创建需要跳转的新界面。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
然后在分别设计两个不同的ui界面
在这里插入图片描述
在这里插入图片描述

2.将新界面的头文件添加到主界面

在这里插入图片描述

3. 主界面跳转到新界面(点击跳转按钮,触发槽函数,创建新界面显示,并关闭主界面)

//跳转按钮槽函数
void MainWindow::on_pushButton_clicked()
{
    //传递主界面的this指针给跳转界面,否则子界面无法调用parentWidget()
    new_widget *win = new new_widget(this);
    win->show();    //显示子界面
    this->hide();   //关闭主界面
}

4. 新界面返回主界面(通过主界面传递的参数,重新显示主界面)

//功能:返回前一界面
void new_widget::on_pushButton_clicked()
{
    this->parentWidget()->show();   //调用parentWidget()返回上一界面的this指针,并显示
    delete this;      //关闭本窗口
}

5. 完整代码

mainwindow.h(没有添加修改过,可以忽略不看)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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 "new_widget.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//跳转按钮槽函数
void MainWindow::on_pushButton_clicked()
{
    //传递主界面的this指针给跳转界面,否则子界面无法调用parentWidget()
    new_widget *win = new new_widget(this);
    win->show();    //显示子界面
    this->hide();   //关闭主界面
}

new_widget.h(没有添加修改过,可以忽略不看)

#ifndef NEW_WIDGET_H
#define NEW_WIDGET_H

#include <QMainWindow>

namespace Ui {
class new_widget;
}

class new_widget : public QMainWindow
{
    Q_OBJECT

public:
    explicit new_widget(QWidget *parent = nullptr);
    ~new_widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::new_widget *ui;
};
#endif // NEW_WIDGET_H

new_widget.cpp

#include "new_widget.h"
#include "ui_new_widget.h"
#include <QDebug>

new_widget::new_widget(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::new_widget)
{
    ui->setupUi(this);
    qDebug() << "上一级界面地址 : "<< this->parentWidget();
}

new_widget::~new_widget()
{
    delete ui;
}

//功能:返回前一界面
void new_widget::on_pushButton_clicked()
{
    this->parentWidget()->show();   //调用parentWidget()返回上一界面的this指针,并显示
    delete this;      //关闭本窗口
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT通过parentWidget()实现多界面跳转及关闭(切换界面和返回前一界面) 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • 拷贝构造函数的参数类型必须是引用

    在C 中 构造函数 拷贝构造函数 析构函数和赋值函数 赋值运算符重载 是最基本不过的需要掌握的知识 但是如果我问你 拷贝构造函数的参数为什么必须使用引用类型 这个问题 你会怎么回答 或许你会回答为了减少一次内存拷贝 很惭愧的是 我的第一感觉
  • android实现ios形式的字体,实现各种自定义的字体

    这段时间整个人都是处在一种颓废的状态 不想做任何事情 每天就是行尸般的上班 下班 然后在家玩游戏 状态是差的要死 脑子感觉就是一片混沌态 也不知道要写些啥了 真的是太可怕 为了防止延续 决定先写篇基础的东西压压惊吧 这样的状态真的不想再有了
  • 数据治理-数据质量监控

    数据质量人人有责 这不仅仅只是一句口号 更是数据工作者的生命线 数据质量的好坏直接决定着数据价值高低 数据质量管理是指在数据创建 加工 使用和迁移等过程中 通过开展数据质量定义 过程控制 监测 问题分析和整改 评估与考核等一系列管理活动 提
  • tensorflow中自定义激活函数

    一 tensorflow中常用的模型定义 import tensorflow as tf model tf keras Sequential tf keras layers Dense 64 kernel initializer norma
  • LLVM程序分析与编译转换框架论文分享

    LLVM 2004年论文原文 概述 本文描述了 LLVM 低级虚拟机 一种编译器框架 旨在通过在编译时 链接时 运行时 以及运行之间的空闲时间 LLVM 以静态单一赋值 SSA 形式定义了一种通用的低级代码表示 具有几个新颖的特性 一个简单
  • 飞腾D2000 + X100 调试记录 X100出来的 DP显示有问题(不显示), USB 接口不能使用的问题。

    1 DP显示出问题时的现象及解决问题的方法 1 1 DP显示出问题时的现象 A 板子电压正常 B DP信号在显示屏上有几条颜色的横线在闪 其他都是黑屏 C 使用D2000的调试串口 进入拷入系统盘的系统 发现进入系统正常 之后查看 其他设备
  • vuejs父子传值,兄弟组件传值

    子传父 子组件需要传递的数据 this emit func1 data this emit func1 data 其中func1对应到父组件中 在父组件引入子的模块中使用 v on绑定 对应上面的传值即 v on func1 fatherF
  • 机器学习概率论相关学习笔记

    一 什么是均值 在概率论中 均值是指随机变量的期望值 也称为数学期望 它是对随机变量可能取值的加权平均 其中权重是每个可能取值发生的概率 对于离散型随机变量 均值的计算公式为 x P x 其中 x表示随机变量可能的取值 P x 表示随机变量
  • 蓝桥杯—单片机第十四届底层驱动函数修改

    本文总结了关于14届蓝桥杯单片机底层驱动文件相较13届的变化所需作出的改变 总体区别不大 欢迎批评指正 1 不再提供 h文件 故要牢记头文件书写格式 与引用格式 添加步骤 2 Onewire c文件 1 头文件添加 include reg5
  • 如何分解质因数

    如何分解质因数 质数 因数 合数 和倍数的知识 的结构图 在小学数学里 两个正整数相乘 那么这两个数都叫做积的因数 或称为约数 质数 是指只能被1和自己整除的自然数 其余的叫做合数 上小学的时候 我们就知道所有的 自然数可以分为质数 素数
  • MIPI CSI相关计算

    本文介绍MIPI CSI相关计算 MIPI CSI为目前Image Sensor和Host连接常用的接口 目前MIPI CSI最高传输速率为2 5Gbps lane 也有一些低版本的最高传输速率为1 5Gbps lane 我们在连接Imag
  • Ubuntu中安装Pytorch

    第一步 为PyTorch单独创建conda环境 需要先创建一个单独的conda环境 用于匹配对应的PyTorch版本 这一步不是必须的 但可以很方便的为PyTorch创建一个干净且独立的Python环境 这里使用比较稳定的3 6版本的Pyt
  • 利用python的matplotlib画图技巧

    目录 1 如何完全显示所有刻度 2 修改jupyter notebook输出图片大小 1 如何完全显示所有刻度 如果我们在没有设置坐标轴刻度的情况下 显示坐标情况及代码如下所示 import matplotlib pyplot as plt
  • sonarLint使用

    转载 sonarLint使用 mine wz的博客 CSDN博客
  • 深度学习(32)随机梯度下降十: 手写数字识别问题(层)

    深度学习 32 随机梯度下降十 手写数字识别问题 层 1 数据集 2 网络层 3 网络模型 4 网络训练 本节将利用前面介绍的多层全连接网络的梯度推导结果 直接利用Python循环计算每一层的梯度 并按着梯度下降算法手动更新 由于Tenso
  • Vue-router history模式下Nginx配置

    对于VUE的router mode history 模式 这里主要是为了去除链接上的 开发的时候 一般都不出问题 是因为开发时用的服务器为node Dev环境中已配置好了 nginx运行的时首页没有问题 链接也没有问题 但在点击刷新后 页面
  • 更改WPS云文档数据存储位置

    WPS的默认位置在C盘 当我们文档数据比较多 文件的体积也越来越大时 就会占用C盘的存储空间 下面为更改WPS云文档数据存储位置的具体步骤 双击 WPS网盘 进入WPS网盘界面 在界面右上方的 更多 中选择 同步与设置 选择 设置 在 缓存
  • 【计算机视觉笔记】图像检索学习 (Content Based Image Retrieval)

    论文跟踪 Awesome image retrieval papers https github com willard yuan awesome cbir papers 综述 SIFT Meets CNN A Decade Survey
  • 白嫖 GitHub Pages,轻松搭建个人博客

    Hexo 是一个快速 简单且功能强大的博客框架 使用 Markdown 解析文档 Hexo 能在几秒内生成带有自定义主题并集成各项功能的网站页面 本文采用 Github Pages Hexo 的方式 搭建个人博客 零 准备工作 1 使用个人
  • QT通过parentWidget()实现多界面跳转及关闭(切换界面和返回前一界面)

    QT通过parentWidget 实现多界面跳转及关闭 切换界面和返回前一界面 不需要跳转界面相互包含头文件 超简单的方法 先将第一级的窗口this指针传给次级的的窗口 子窗口通过parentWidget 返回第一级的this并用来调用sh