1. 程式人生 > >多個訊號對應單個槽的實現

多個訊號對應單個槽的實現

      利用多個訊號對應一個槽函式,這樣就不用每一個訊號都設一個槽函式那麼麻煩了。

       假設定義個多個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();
    }

}