【Qt】QT之中多个信号连接同一个槽【细说版】

      qt的开发中有时候需要将多个信号连接到一个槽函数中,那么这些信号怎么才能找到槽函数中自己的如意郎君?

其实,有很多例子都是简单将sender()指针强行转化成信号发送者类型,然后判断其是否存在,如果存在那么强

行转化成这个类的指针,就可在在槽函数里面被认定下来。在比如这么一个环境下:一个button,一个Qtimer都指向

一个槽函数时候,我们分别将sender()指针强行转化成QPushButton和QTimer类型,只要其存在,在槽函数里面

分类写是可以的。但是问题是,比如有多个PushButton了?好吧?说了这么多,直接上代码!!!

void Dialog::movieSlot()
{
    QObject* sender = QObject::sender();//对于继承类的情况,因为派生类按继承规则也是一个基类,所以将派生类隐式转换成基类
    if(sender == this->timer)
    {
        qDebug()<<sender;
        autoMovie = new QMovie("./images/play1.gif");
        ui->viewLabel->setMovie(autoMovie);
        qDebug()<<"MovieActivity"<<autoMovie->isValid();
        autoMovie->start();
        timer->stop();
    }
 
    if(sender == ui->playBtn)//比较符号的两边不管是C还是C++中都是先将两边隐式转换成同一类型(这种类型叫公共类型)后再比较
    {
        qDebug()<<sender;
        if(timer->isActive())
        {
            timer->stop();
        }
        movie = new QMovie("./images/play.gif");
        ui->viewLabel->setMovie(movie);
        qDebug()<<"MovieActivity"<<movie->isValid();
        movie->start();
    }
    if(sender == ui->playBtn2)
    {
        qDebug()<<sender;
        if(timer->isActive())
        {
            timer->stop();
        }
        movie = new QMovie("./images/play2.gif");
        ui->viewLabel->setMovie(movie);
        qDebug()<<"MovieActivity"<<movie->isValid();
        movie->start();
    }
}
   上面直接按照sender()指针与信号来源做对比,就可以很好区分。

另外,一般情况下,一个指针要么是空,要么非空,而我们这里可以直接来个if(

dynamic_cast<QTimer*>(sender())
)其实看文档会知道,sender()指针要么存在非空,要么不存在那就被置为0的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值