多个信号对应单个槽的实现

      利用多个信号对应一个槽函数,这样就不用每一个信号都设一个槽函数那么麻烦了。

       假设定义个多个QLineEdit,要读其中的数字:

首先在头文件中定义一个槽函数:

private slots:
     void on_val_returnPressed();

在相应的源文件中连接信号与槽函数:

    connect(val_v,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(val_w,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(ia1,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(ia2,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(ia3,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(ia4,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(ia5,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(ia6,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(val_Sr,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));
    connect(val_Spr,SIGNAL(returnPressed()),this,SLOT(on_val_returnPressed()));

都对应的是on_val_returnPressed()函数。

重点时在槽函数中怎么识别是哪个控件发出的信号:

void ProRobotics::on_val_returnPressed()
{
    QLineEdit *lEdit = dynamic_cast<QLineEdit*>(sender());//这里dynamic_cast,用qobject_cast,static_cast都可,具体区别以后在说
    if(lEdit == val_v)
    {
        QString sVd = val_v->text();
        Vd          = sVd.toFloat();
    }
    if(lEdit == val_w)
    {
        QString sWd = val_w->text();
        Wd          = sWd.toFloat();
    }
    if(lEdit == ia1)
    {
        QString sa1 = ia1->text();
        a1          = sa1.toFloat();
    }
    if(lEdit == ia2)
    {
        QString sa2 = ia2->text();
        a2          = sa2.toFloat();
    }
    if(lEdit == ia3)
    {
        QString sa3 = ia3->text();
        a1          = sa3.toFloat();
    }
    if(lEdit == ia4)
    {
        QString sa4 = ia4->text();
        a4          = sa4.toFloat();
    }
    if(lEdit == ia5)
    {
        QString sa5 = ia5->text();
        a5          = sa5.toFloat();
    }
    if(lEdit == ia6)
    {
        QString sa6 = ia6->text();
        a6          = sa6.toFloat();
    }
    if(lEdit == val_Sr)
    {
        QString ssigma_r   = val_Sr->text();
        sigma_r            = ssigma_r.toFloat();
    }
    if(lEdit == val_Spr)
    {
        QString ssigma_phi  = val_Spr->text();
        sigma_phi           = ssigma_phi.toFloat();
    }

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值