QT学习笔记(五)自定义的信号和槽的重载

1.声明重载
以上一篇为例,继续完成重载部分,首先是声明部分
mother.h文件里声明重载的两个槽

    void treat();
    void treat(QString str);

daughter.h文件里声明重载的两个信号

    void hungry();
    void hungry(QString str);

说明:重载在信号和槽需要参数对应,必须是同类型,比如我这里的信号里有一个参数,类型是QString,那么在槽里必须也是QString类型。但是,信号的参数个数可以多于槽函数的参数个数,类型必须.
.一一对应。

2.槽函数的定义部分
mother.cpp文件里增加新的槽函数定义,我一共给了三种写法,效果在后文

void Mother::treat(QString str)
{
    qDebug()<<"请女儿吃"<<str;
    //QString转化为char*的方法:先转为QByteArray(通过toUtf8()),再转为char*(data())
    qDebug()<<"请女儿吃"<<str.toUtf8().data();
    qDebug()<<("请女儿吃"+str).toUtf8().data();
}
  1. 建立连接部分
    由于此时函数重载,原本的connect函数并不清楚要调用哪个函数,所以需要通过函数指针选择对应的函数
    void (Mother:: *mytreat)(QString)=&Mother::treat;
    void (Daughter:: *myhungry)(QString)=&Daughter::hungry;
    //建立连接(发送方,信号内容,接受方,信号槽)
    connect(d,myhungry,m,mytreat);

在写成员函数的成员地址时,记得写上成员函数的作用域!是Mother和Daughter的函数指针!

  1. 触发部分
    重新写一个传了参数的触发
void Widget::classisover()
{
    emit d->hungry("烤肉");
}
  1. 效果
    在这里插入图片描述
    可以看到三种不同的结果

  2. disconnect:补充断开连接的方法,继续用上一篇的例子

    //断开连接(发送方,信号内容,接受方,信号槽)
    disconnect(d,myhungry,m,mytreat)
  1. 一个信号连多个槽函数
  2. 多个信号可以连接同一个槽函数
  3. QT4的信号槽连接版本
    //建立连接(发送方,SIGNAL(信号内容),接受方,SLOT(信号槽))
    connect(d,SIGNAL(hungry()),m,SLOT(treat()));

优点:参数直观
缺点:类型不做检测

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值