将两个信号连接到一个插槽
Connect two signals to one slot
我有一个名为 paintButton
的 slot
。 slot内有swtich条件如下图:
在每种情况下,我都需要接收一个名为 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;
}
}
我有一个名为 paintButton
的 slot
。 slot内有swtich条件如下图:
在每种情况下,我都需要接收一个名为 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;
}
}