Qt中点击pushButton按钮实现切换父子界面
这里用到的是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按钮实现切换父子界面相关推荐
- Qt 点击ToolButton按钮弹出新的窗口
目录 第一步:新建QT设计师界面类 第二步:将新窗口的头文件加入到主窗口头文件中 第三步:为按钮事件设置信号与槽 需求说明:主窗口为mainWindow,主窗口上有一个按钮,通过点击按钮能弹出一个新的 ...
- html中点击提交按钮显示提交i成功,百里香叶:点击提交按钮后显示成功信息
我有一个spring-boot申请,Thymeleaf.我有非常基本的情况.有一个表单,当用户点击提交按钮时,表单数据应发送到控制器,但在同一页面中应显示成功消息.百里香叶:点击提交按钮后显示成功信息 ...
- Vue.js实现点击左右按钮图片切换
关于图片切换,网上也有很多的说法,这边通过参考给出了如下所示的解决方案 效果: html 通过v-for循环展示图片列表itemlist,将图片路径保存在data中的itemlist中,添加上下按钮的 ...
- 在jsp页面中点击编辑按钮,显示input边框,可编辑,点击保存按钮,输入框消失,不可编辑,并将文本框中的内容保存到数据库中
寻找的资料 一. 默认readonly不允许编辑.点击编辑的时候加上边框样式,去掉readonly属性 <style>.readonly input{border:none}</st ...
- 01.QT中点击弹出新页面
调用者类定义CallWidget.h #pragma once#include <QtWidgets/QMainWindow> #include "ui_CallWidget. ...
- Power BI:在列表中点击详情按钮跳转到详情页面并传递参数
如下图所示,当点击最后一列的Detail链接,将跳转到详情页面,并查询出对应ReportMonth的详细数据: 图1 主表:dimReportMonth (即图1中用到的表) 详情表:factCost ...
- uniapp 中点击某个按钮关注成功 操作
1.dom 子组件 <view class="flex align-center justify-center rounded bg-main text-white animated& ...
- Android 中点击某个按钮实现 返回键 的功能
有时候,我们需要用到返回键的功能,但为了美观,通常我们会将返回键放在页面左上角,这里我们就需要触发这个返回键的功能才能起到返回的作用,看代码吧 backBtn.setOnClickListener(n ...
- java弹框形式输入_java中点击一个按钮弹出两个输入文本框的源代码
展开全部 写了一个很简单的案例,可以参考和修改import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.eve ...
最新文章
- configure_file路径疑惑
- 配置Exchange OWA和Sharepoint网站单点登录
- 2015年最新出炉的JavaScript开发框架
- R语言广义线性模型泊松回归(Poisson Regression)模型
- mysql生成app接口_Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口...
- 约束布局constraint-layout导入失败的解决方案 - 转
- Mongodb 3.0 创建用户
- HTTP Status 404 - There is no Action mapped for...
- 太原理工大学ICPC队介绍(2021版)
- 我们的地盘,我们做主
- 什么是云服务?vivo云服务是什么意思?
- office2013安装与卸载
- Warning from https://repo.packagist.org: Support for Composer 1 is deprecate
- python学习使用easyocr识别图片文字
- 苹果上网本报价_1小时一个价 iPhone12加价300元起
- android壁纸软件代码,android高清壁纸APP完整源码HD Wallpaper(服务端+客户端)
- 选择排序总结以及排序算法的稳定性
- PTA团体天梯赛汇总
- 类似蘑菇街、迷尚的流瀑布图片展示Demo
- 迪亚-土地利用现状统计
热门文章
- printf()详解之终极无惑
- python安装sklearn-contrib-py-earth包实战:pip和conda安装失败、手动下载whl文件安装实战
- 【问题解决】Tensorflow运行出现错误: No module named tensorflow.contrib
- qt 使用插件astyle_使用astyle格式化代码
- 改进BERT的中文评论情感分类模型
- jquery tr 移除 背景色_用jQuery remove()方法删除表格行(table tr)的写法
- VMware Workstation 不可恢复错误: (vcpu-0)
- 数学建模笔记——最优值之我见(爬山算法,模拟退火
- mysql底层数据结构与算法
- Python利用turtle库绘制花样螺旋正方形