[英]Connect two signals to one slot
我有一個名為paintButton
的slot
。 槽內有切換條件,如下圖:
在每種情況下,我都需要signal
一個名為newValue
的signal
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
插槽以接收兩個信號( id
和newValue
)。 或者有沒有更好的方法來做到這一點?
提前致謝。
有人已經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.