这里用到的是QWidget类中的show()和hide()函数。
比如这里我们要实现通过点击“参数设置”按钮来跳转到新的界面,并在新界面进行参数选择,如下图所示:


大致思路是通过绑定“参数设置”按钮的点击信号,将新的ui窗口show出来,原来的主程序窗口可以自行选择是否要hide。
我们在项目Forms中添加QT设计师界面类文件,并且将ui界面设置好,并在原头文件中引用这个头文件。
然后在主窗口的cpp文件里实例化这个新窗口,并在槽函数中将新窗口show出来:

void Widget::on_btn_ConfirmPosition_clicked()
{NewWidget *position = new NewWidget();//在主窗口中实例化子窗口this->hide();//this代表主窗口position->show();//显示子窗口
}

因为“参数设置”按钮是主窗口中的控件,而跳出新窗口需要用到“参数设置”的cliked信号,所以必须在主窗口中实例化新窗口。

如果说我们需要在显示新的子窗口时隐藏主窗口,然后在关闭子窗口时恢复主窗口,需要怎么做呢?
我第一时间想到的是在子窗口的cpp文件中实例化主窗口,然后和上文做同样的操作:

#include "widget.h"
...
void NewWidget::on_btn_Return_clicked()
{Widget *widget = new Widget();this->close();widget->show();
}

乍一看,这么写是没什么问题的,但是编译时会报错。原因是我们在主窗口widget.h中已经引用过子窗口的newwidget.h文件了,如果说又在子窗口中再次引用widget头文件,编译就会报错。可是,如果说子窗口中不引用主窗口的头文件,那就无法在子窗口中调用主窗口的函数,也就无法直接控制主窗口的状态了。
这个问题在网上找到了解决方法,我们可以给子窗口写一个自定义信号,当子窗口关闭时,发出这个信号,并且在主窗口中用槽函数绑定这个信号,这样就可以通过信号来间接控制主窗口的状态了:

//在子窗口的头文件中定义信号
signal: void ConfirmPosition_closed();//信号是不需要再次拿出来声明的
private signals:void btn_Return_clicked();
//在子窗口的cpp文件中
void NewWidget::on_btn_Return_clicked()
{this->closed();emit this->ConfirmPosition_closed();//关闭时发出信号
}
//在主窗口的cpp文件中
void Widget::on_btn_ConfirmPosition_clicked()
{NewWidget *position = new NewWidget();this->hide();position->show();//子窗口打开时就监听其关闭信号,信号触发时重新显示主窗口//也可以根据需要加入其他功能connect(position,&NewWidget::ConfirmPosition_closed,this,[=](){this->show();});
}

另外我在修改界面时新加入了几个界面,一共是5个子窗口,一个主窗口。我在构架函数时直接把所有窗口全部实例化,然后在不同按钮的槽函数中执行hide、show操作,这时候经常会碰到程序崩溃的问题。后来把实例化放到了对应的槽函数里,就不会有这种现象了,我猜大概是因为内存泄漏导致的,这也是平时需要注意的问题。

Qt中点击pushButton按钮实现切换父子界面相关推荐

  1. Qt 点击ToolButton按钮弹出新的窗口

    目录 第一步:新建QT设计师界面类 第二步:将新窗口的头文件加入到主窗口头文件中 第三步:为按钮事件设置信号与槽 需求说明:主窗口为mainWindow,主窗口上有一个按钮,通过点击按钮能弹出一个新的 ...

  2. html中点击提交按钮显示提交i成功,百里香叶:点击提交按钮后显示成功信息

    我有一个spring-boot申请,Thymeleaf.我有非常基本的情况.有一个表单,当用户点击提交按钮时,表单数据应发送到控制器,但在同一页面中应显示成功消息.百里香叶:点击提交按钮后显示成功信息 ...

  3. Vue.js实现点击左右按钮图片切换

    关于图片切换,网上也有很多的说法,这边通过参考给出了如下所示的解决方案 效果: html 通过v-for循环展示图片列表itemlist,将图片路径保存在data中的itemlist中,添加上下按钮的 ...

  4. 在jsp页面中点击编辑按钮,显示input边框,可编辑,点击保存按钮,输入框消失,不可编辑,并将文本框中的内容保存到数据库中

    寻找的资料 一. 默认readonly不允许编辑.点击编辑的时候加上边框样式,去掉readonly属性 <style>.readonly input{border:none}</st ...

  5. 01.QT中点击弹出新页面

     调用者类定义CallWidget.h #pragma once#include <QtWidgets/QMainWindow> #include "ui_CallWidget. ...

  6. Power BI:在列表中点击详情按钮跳转到详情页面并传递参数

    如下图所示,当点击最后一列的Detail链接,将跳转到详情页面,并查询出对应ReportMonth的详细数据: 图1 主表:dimReportMonth (即图1中用到的表) 详情表:factCost ...

  7. uniapp 中点击某个按钮关注成功 操作

    1.dom 子组件 <view class="flex align-center justify-center rounded bg-main text-white animated& ...

  8. Android 中点击某个按钮实现 返回键 的功能

    有时候,我们需要用到返回键的功能,但为了美观,通常我们会将返回键放在页面左上角,这里我们就需要触发这个返回键的功能才能起到返回的作用,看代码吧 backBtn.setOnClickListener(n ...

  9. java弹框形式输入_java中点击一个按钮弹出两个输入文本框的源代码

    展开全部 写了一个很简单的案例,可以参考和修改import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.eve ...

最新文章

  1. configure_file路径疑惑
  2. 配置Exchange OWA和Sharepoint网站单点登录
  3. 2015年最新出炉的JavaScript开发框架
  4. R语言广义线性模型泊松回归(Poisson Regression)模型
  5. mysql生成app接口_Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口...
  6. 约束布局constraint-layout导入失败的解决方案 - 转
  7. Mongodb 3.0 创建用户
  8. HTTP Status 404 - There is no Action mapped for...
  9. 太原理工大学ICPC队介绍(2021版)
  10. 我们的地盘,我们做主
  11. 什么是云服务?vivo云服务是什么意思?
  12. office2013安装与卸载
  13. Warning from https://repo.packagist.org: Support for Composer 1 is deprecate
  14. python学习使用easyocr识别图片文字
  15. 苹果上网本报价_1小时一个价 iPhone12加价300元起
  16. android壁纸软件代码,android高清壁纸APP完整源码HD Wallpaper(服务端+客户端)
  17. 选择排序总结以及排序算法的稳定性
  18. PTA团体天梯赛汇总
  19. 类似蘑菇街、迷尚的流瀑布图片展示Demo
  20. 迪亚-土地利用现状统计

热门文章

  1. printf()详解之终极无惑
  2. python安装sklearn-contrib-py-earth包实战:pip和conda安装失败、手动下载whl文件安装实战
  3. 【问题解决】Tensorflow运行出现错误: No module named tensorflow.contrib
  4. qt 使用插件astyle_使用astyle格式化代码
  5. 改进BERT的中文评论情感分类模型
  6. jquery tr 移除 背景色_用jQuery remove()方法删除表格行(table tr)的写法
  7. VMware Workstation 不可恢复错误: (vcpu-0)
  8. 数学建模笔记——最优值之我见(爬山算法,模拟退火
  9. mysql底层数据结构与算法
  10. Python利用turtle库绘制花样螺旋正方形