簡體   English   中英

將兩個信號連接到一個插槽

[英]Connect two signals to one slot

我有一個名為paintButtonslot 槽內有切換條件,如下圖:

在每種情況下,我都需要signal一個名為newValuesignal

void Program::paintButton(int id)
{

    switch(id)
    {
    case 1 :

       // recive  signal: "newValue" here
        int  portNo = 1;
        setValue(portNo, newValue);

        ui->btn1->setText("1");
        ui->btn2->setText("");
        ui->btn3->setText("");
        break;

    case 2 :

       // recive  signal: "newValue" here
        int  portNo = 2;
        setValue(portNo, newValue);

         ui->btn2->setText("2");
         ui->btn1->setText("");
         ui->btn3->setText("");
        break;

    case 3 :

      // recive  signal: "newValue" here
        int  portNo = 3;
        setValue(portNo, newValue);

        ui->btn3->setText("3");
        ui->btn1->setText("");
        ui->btn2->setText("");
        break;

    }

}

如何修改paintButton插槽以接收兩個信號( idnewValue )。 或者有沒有更好的方法來做到這一點?

提前致謝。

有人已經emit mysignal(id,value)嗎? 如果是這樣,請使用特定的方法。 我將重新使用您的重載名稱來顯示:

void Program::paintButton(int id, int value)
{
     setValue(id, value);
     paintButton(id); 
}

void Program::paintButton(int id)
{
    switch(id)
    {
    case 1 :
        ui->btn1->setText("1");
        ui->btn2->setText("");
        ui->btn3->setText("");
        break;
    case 2 :
         ui->btn2->setText("2");
         ui->btn1->setText("");
         ui->btn3->setText("");
        break;
    case 3 :
        ui->btn3->setText("3");
        ui->btn1->setText("");
        ui->btn2->setText("");
        break;
    }
}

您不能等待代碼中間的信號。 如果您需要響應兩個不同信號中的第二個,您可能希望將每個信號附加到自己的插槽中:

void Program::slotId(int id)
{
    if (m_dopaint)
    {
        m_dopaint = false;
        paintButton(id, m_value)
    }
    else
    {
        m_id = id;
        m_dopaint = true;
    }
}

void Program::slotValue(int value)
{
    if (m_dopaint)
    {
        m_dopaint = false;
        paintButton(m_id, value)
    }
    else
    {
        m_value = value;
        m_dopaint = true;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM