三、带参数信号与槽

本文介绍了在Qt中如何处理带参数的信号与槽的连接。通过修改信号和槽的名称以区别参数类型,并展示在Qt5中如何正确建立这种连接,强调了Qt5新语法在编译时的安全性优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在subwidget.h中声明一个signal. 和之前的信号函数重名但是有参数:

void  backSignal(QString);

之后在subwidget.cpp的槽函数sendSignal()中也发送该信号:

emit backSignal("子窗口请求返回");

在mainwidget.h中声明一个槽函数来响应该信号:

void logSlot(QString);

并在mainwidget.cpp中定义该槽函数, 打印信号传过来的字符串:

void MainWidget::logSlot(QString log)
{
   
    qDebug() << log;
}

因为使用到了qDebug, 所以需要在mainwidget.h中添加头文件:

#include <QDebug>

下面在mainwidget.cpp中建立连接即可:

connect(&subWin, backSignal, this, &MainWidget::logSlot);

如果没有重名信号的话, 这样写是没有问题的, 但是我们现在由两个backSignal信号, 一个不带参数, 一个带参数, 编译器是没办法区分的, 需要我们告诉它, 所以, 删掉那两条信号都是backSignal的connect语句重新建立连接:

void(SubWidget::*backSignal)() = &SubWidget::backSignal;  

// 我是没有参数的backSignal, 叫backSignal1

connect(&subWin, backSignal, this, &MainWidget::backSlot);
    
void(SubWidget::*backSigna2)(QString) = &SubWidget::backSignal;  
// 我是带一个QString参数的backSignal, 叫backSignal2
connect(&subWin, backSigna2, this, &MainWidget::logSlot);

保存后 Ctrl + R运行, 点击Back按钮, 会输出信号发送的字符串:
在这里插入图片描述

如果用Qt4的语法的话, 会十分简单:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值