【QT5学习笔记】 3--自定义信号

3–自定义信号


目录

1–给窗口添加button
2–信号槽的实现以及自定义槽函数

3.1 创建子窗口时隐藏MainWidget窗口

​ 只需要在自定义槽函数 void MainWidget::createSubWindows()中添加this->hide();

void MainWidget::createSubWindows()
{
    this->hide();
    sub_windows.show();
}

此时,当我们在MainWidget窗口点击create the subWindows按钮时,subWindows被创建的同时MainWidget窗口会被隐藏。如图所示。

在这里插入图片描述

3.2 再次显示MainWideget窗口

​ 假设现在的需求是点击subWindows窗口中的subButton,显示MainWidget窗口并隐藏subWindows窗口,该如何实现?

​ 显而易见的是,要相应点击事件,需要让button发出信号,通过一个槽函数来接收信号。

​ 此时就会存在一个问题,在subWindows窗口中,无法控制MainWidget窗口的显示或者隐藏(因为subWindows是MainWidget类的一个对象)。所以,我们只能通过MainWidget对象自身来控制MainWidget窗口的显示和隐藏,且由于subWindows是MainWidget的一个成员对象,所以MainWidget可以接收subWindows发出的信号。

​ 所以,具体实现方法是:

通过点击subButton,让subWindows发出一个信号,同时MainWidget接收subWindows发出的信号来控制MainWidget的显示。

​ 显然,这里需要两个connect,一个连接subButton与subWindows,一个连接subWindows与MainWidget。且QT5本身没有提供我们当前需要从subWindows发出的信号,所以需要自定义一个信号sigSubShowMain(),该信号通过subButton与subWindows的connect中槽函数发射出来,充当subWindows与MainWidget的connect中的信号,并让其槽函数响应。

​ 具体步骤如下:

​ 1)在SubW.h中声明自定义信号sigSubShowMain()和自定义槽函数slotShowMain()

//SubW.h
class SubW : public QWidget
{
...
signals:
      //自定义信号
      //1、可以有参数
      //2、可以重载
      //3、返回值为void
      void sigSubShowMain();
public slots:
      void slotShowMain();
...
};

​ 2)在SubW.cpp connect信号与槽,并定义自定义槽函数slotShowMain()

SubW::SubW(QWidget *parent) : QWidget(parent)
{
   ...
    connect(&sub_button,&QPushButton::clicked,this,&SubW::slotShowMain;
}

void SubW::slotShowMain()
{
    //发送信号 emit + sig();
    emit sigSubShowMain();
}

​ 3) 在MainWidget.h中声明自定义槽函数,slotShowMyself()

#MainWidget.h
class MainWidget : public QWidget
{
...
public slots:
    void slotShowMyself();
};

​ 4)在MainWidget.cpp中连接信号与槽,并定义slotShowMyself()

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
	...
    connect(&sub_windows,&SubW::sigSubShowMain,this,&MainWidget::slotShowMyself);

}
void MainWidget::slotShowMyself()
{
    //显示MainWidget并隐藏sub_windows
    this->show();
    sub_windows.hide();
}

​ 至此,我们就实现了主窗口点击显示子窗口,子窗口点击显示主窗口。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值