首先既然你打开了这篇文章,那你一定想到过,将子界面作为父界面的一个属性来实现,但是这样父界面通知子界面会很轻松,但子界面通知父界面怎么搞呢?很显然不能再子界面再实例化父界面(因为这样做会循环引用),那避免循环引用,聪明的你一定想到了使用信号槽机制来解决这个问题,没错,这也是我想到的解决方法。

不过我实际开发遇到的问题比这个好要稍微复杂一点(嘻嘻嘻其实还好了,就是多嵌套了一层)我们先来看图:

我需要实现的功能呢是这样的:登录页面弹出主界面,然后主界面中的某一个子界面可以切换用户即再切回登录页面。

那么我们简单来理一下这里面的逻辑关系:

也就是说这是一个简单的爷套父,父套子的关系,那么父界面传递消息给子界面很简单直接实例出来一个子界面就可以了,那么子界面传递给父界面是怎么做的呢?我这边以按钮为例,在子界面中声明一个信号,在父界面中将子界面声明的这个信号与父界面的槽函数(即处理函数)绑定:

子界面(即维护界面)头文件代码:

signals:
void maintenanceSignal();

子界面cpp代码:

FrmMaintenance::FrmMaintenance(QWidget *parent) :
QWidget(parent),
ui(new Ui::FrmMaintenance)
{
ui->setupUi(this);
SetChangeUser();
SetLiquidMaintenance();
connect(ui->btnChangeUser,&QPushButton::clicked,this,&FrmMaintenance::btnChangeUserClick);
}

void FrmMaintenance::btnChangeUserClick()
{

  emit maintenanceSignal();
}
 

父界面(即主界面)头文件代码:

signals:
void loginSignal(); private:
Ui::MainWindow *ui;
// 界面类的对象作为指针
FrmMaintenance *frmMaintenance = new FrmMaintenance();

父界面cpp代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); SetUi();
SetBottomUi();
connect(ui->btnSampleLoading,&QPushButton::clicked,this,&MainWindow::OpenFrmSampleloading);
connect(ui->btnSampleManagement,&QPushButton::clicked,this,&MainWindow::OpenFrmSampleManagement);
connect(ui->btnAppStatus,&QPushButton::clicked,this,&MainWindow::OpenFrmAppStatus);
connect(ui->btnAlarmInfo,&QPushButton::clicked,this,&MainWindow::OpenFrmAlarmInfo);
connect(ui->btnParaSetting,&QPushButton::clicked,this,&MainWindow::OpenFrmParaSetting);
connect(ui->btnMaintenance,&QPushButton::clicked,this,&MainWindow::OpenFrmMaintenance);
connect(frmMaintenance,&FrmMaintenance::maintenanceSignal,this,&MainWindow::HideWindow);
} void MainWindow::HideWindow()
{
qDebug("QQQ");
emit loginSignal();
}

爷界面(即登录界面)cpp文件代码(头文件就声明了几个槽函数和一个

MainWindow w;其他就不贴了):
FrmLogin::FrmLogin(QWidget *parent) :
QWidget(parent),
ui(new Ui::FrmLogin)
{
ui->setupUi(this);
connect(btnLogin,&QPushButton::clicked,this,FrmLogin::btnLoginClick);
connect(&w,&MainWindow::loginSignal,this,&FrmLogin::ChangeUser);
} void FrmLogin::btnLoginClick()
{
w.show();
this->hide();
} void FrmLogin::ChangeUser()
{
this->show();
w.hide();
}

好了,记录完毕,吃午饭去了~

Qt中父子页面切换隐藏实现方法 (利用信号槽机制实现)的更多相关文章

  1. [转]Qt中定时器使用的两种方法

    Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类. 其精确度一般依赖于操作系统和硬件,但一般支持20ms.下面将分别介绍两种方法来使用定时器. 方法 ...

  2. Qt开发之信号槽机制

    一.信号槽机制原理 1.如何声明信号槽 Qt头文件中一段的简化版: class Example: public QObject { Q_OBJECT signals: void customSigna ...

  3. QT源码之Qt信号槽机制与事件机制的联系

    QT源码之Qt信号槽机制与事件机制的联系是本文要介绍的内容,通过解决一个问题,从中分析出的理论,先来看内容. 本文就是来解决一个问题,就是当signal和slot的连接为Qt::QueuedConne ...

  4. Qt 学习之路 2(4):信号槽

    Home / Qt 学习之路 2 / Qt 学习之路 2(4):信号槽 Qt 学习之路 2(4):信号槽  豆子  2012年8月23日  Qt 学习之路 2  110条评论 信号槽是 Qt 框架引以 ...

  5. Q_OBJECT提供了信号槽机制、国际化机、RTTI 的反射能力(cpp中使用Q_OBJECT导致无法处理moc,就需要#include “moc_xxx.h”)

     只有继承了QObject类的类,才具有信号槽的能力.所以,为了使用信号槽,必须继承QObject.凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT.不管是不 ...

  6. QT信号槽机制

    信号槽 信号槽是QT中用于对象间通信的一种机制,也是QT的核心机制.在GUI编程中,我们经常需要在改变一个组件的同时,通知另一个组件做出响应.例如: 一开始我们的Find按钮是未激活的,用户输入要查找 ...

  7. VJGUI消息设计-兼谈MFC、QT和信号/槽机制

    星期六下午4点,还在公司加班.终于写完了下周要交工的一个程序. 郁闷,今天这几个小时写了有上千行代码吧?虽然大部分都是Ctrl-C+Ctrl-V,但还是郁闷. 作为一个有10年经验的MFC程序员,郁闷 ...

  8. Qt学习记录--02 Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)

    一 闲谈: 熟悉Window下编程的小伙伴们,对其消息机制并不陌生, 话说:一切皆消息.它可以很方便实现不同窗体之间的通信,然而MFC库将很多底层的消息都屏蔽了,尽管使用户更加方便.简易地处理消息,但 ...

  9. QT写hello world 以及信号槽机制

    QT是一个C++的库,不仅仅有GUI的库.首先写一个hello world吧.敲代码,从hello world 写起. #include<QtGui/QApplication> #incl ...

  10. 非Qt工程使用Qt的信号槽机制

    非Qt工程,使用Qt的信号槽机制,蛋疼不?反正我现在就是要做这样一件蛋疼的事. 要使用Qt的信号槽机制,下面是从Qt Assist里面关于 signal & slots 的一句介绍: All ...

随机推荐

  1. 优化if...else...语句

    写代码的时候经常遇到这样的场景:根据某个字段值来进行不同的逻辑处理.例如,不同的会员等级在购物时有不同的折扣力度.如果会员的等级很多,那么代码中与之相关的if...elseif...else...会特 ...

  2. MQ系列11:如何保证消息可靠性传输(除夕奉上)

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...

  3. npm 中设置环境NODE_ENV变量,判断失败打印process.env.NODE_ENV确实是"development",但是判断process.env.NODE_ENV === "development" 是false

    通过package.json 的scripts脚本 修改NODE_ENV的值来区分开发环境和生产环境. "scripts": { "build": " ...

  4. RA-Depth: Resolution Adaptive Self-Supervised Monocular Depth Estimation

    注:刚入门depth estimation,这也是以后的主要研究方向,欢迎同一个方向的加入QQ群(602708168)交流. 1. 论文简介 论文题目:RA-Depth: Resolution Ada ...

  5. zookeeper05Curator

    转https://blog.csdn.net/u012129558/article/details/81076487   1.zookeeper 开源客户端curator介绍 1.1 curator简 ...

  6. windows C++

    #include <Windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar ...

  7. qt元对象系统之 Q_PROPERTY宏

    这个宏需要和Q_OBJECT宏结合使用, moc工具为Q_OBJECT宏所声明的变量和函数生成定义 同时为Q_PROPERTY宏添加函数的映射,以便qt_static_metacall 能够寻找到对应 ...

  8. 注释、input()、运算符、组织结构(顺序、选择、循环)

    注释 单行注释 # 多行注释 将三对引号之间的为多行注释 ''' ''' 中文编码的声明注释 #coding:gbk input()函数 接受来自用户的输入 返回值是str 值的存储 使用=对输入的值 ...

  9. 【TS】接口和接口继承

    接口 接口也相当于语法规范,在使用ts编写的时候,需要注重的就是数据类型以及语法规范,恰好这里提供了一个接口,在进行传值的时候,传值的类型以及字段必须符合我们预期的类型规范才可以,下面是代码演示 语法 ...

  10. JAVA 进阶完结

    1.接口 这个类中 有了新的关键字 abstract 并且里面的方法没有括号 这样的类 上图就是 抽象函数与抽象类 那么继承抽象类的子类需要做什么工作呢 2.代码编写的思路 3.接口 接口跟抽像类的很 ...