首页 > 其他分享 >qt中父子页面切换隐藏实现方法 (利用信号槽机制实现)

qt中父子页面切换隐藏实现方法 (利用信号槽机制实现)

时间:2022-12-03 12:11:26浏览次数:48  
标签:界面 qt 实现 ui connect FrmMaintenance clicked MainWindow 页面

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

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

 

 

 

 

 

 

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

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

 

 

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

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

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,实现,ui,connect,FrmMaintenance,clicked,MainWindow,页面
From: https://www.cnblogs.com/jyj666/p/16947305.html

相关文章

  • P4实现测量任务和sketch的思想
    P4实现HLL/*HLLSKETCH:https://research.neustar.biz/2012/10/25/sketch-of-the-day-hyperloglog-cornerstone-of-a-big-data-infrastructure/*///NOTE:instead......
  • 协程及其实现,图片懒加载
    一、什么是协程?答:协程就是一个无优先级的子程序调度组件,允许子程序在特定的地方挂起和恢复。协程包含于线程,线程包含于进程。只要内存足够,一个线程可以有任意多个协程,但某......
  • 低代码平台前端的设计与实现(二)构建引擎BuildEngine切面处理设计
    上一篇文章,我们介绍了如何设计并实现一个轻量级的根据JSON的渲染引擎,通过快速配置一份规范的JSON文本内容,就可以利用该JSON生成一个基础的UI界面。本文我们将回到低开的核......
  • 查看前端页面调用接口及参数方法
    查看前端页面调用接口及参数方法依该页面的查询按钮为例(浏览器为Goole)  第一步:摁一下键盘上的F12①会看到调试信息框出现在了右边,由于屏幕的原因,让这个信息框在右边......
  • python | 一个简单的icmp shell实现(不完善)
    python|一个简单的icmpshell实现(不完善)一个是server端,一个是cilent端,其实问题还是很多的,尤其是在真实网络中的时候,这个shell只适用于直连的情况,并且data不能太大(因为ic......
  • 分布式系统(唯一) ID 生成器实现方案
    分布式系统ID一个唯一ID在一个分布式系统中是非常重要的一个业务属性,其中包括一些如订单ID,消息ID,会话ID,他们都有一些共有的特性:全局唯一(唯一标识某个请求,某个业务)......
  • shell实现的进度条
    ​​具体脚本如下progressbar.sh​​:#TheMITLicense(MIT)#Copyright(c)2014HaiKieu#Permissionisherebygranted,freeofcharge,toanypersonobtainingacop......
  • QT点击按钮改变背景色
    1.需求描述:有一组按钮,每次只能让一个按钮有效,点击该按钮,让该按钮的setEnabled设为false,其他的设为true有一组按钮,鼠标点击按钮,该按钮改变背景色,例如变成绿色,而其他按钮不变......
  • 基于Nacos实现日志级别的动态切换
    想要实现日志级别动态切换有两个要点:1.监听Nacos配置文件修改2.根据配置动态设置当前日志级别监听Nacos监听类代码:packagecom.yibing.nacosprovider.listener;impor......
  • 将html字符串转换成html标签显示到页面上(转)
    转自:将html字符串转换成html标签显示到页面上当我们将html字符串放到页面上时,是无法直接显示出我们想要的内容,这时我们需要将字符串转化成为html标签(必须保证html字符串的......