我想将两个整数(字符串和音品)发送到一个SLOT,它将处理按下的按钮的位置。 SIGNAL和SLOT参数必须匹配所以我认为我需要重新实现QPushButton :: clicked事件方法。问题是我是Qt的新手,可以使用一些方向。
connect(&fretBoardButton[string][fret], SIGNAL(clicked()), this, SLOT (testSlot()));
答案 0 :(得分:4)
如果您使用C++11 connection syntax,则可以使用带有testSlot
和string
参数的fret
来电的lambda:
connect(&fretBoard[string][fret], &QPushButton::clicked, [this, string, fret]() {
testSlot(string, fret);
});
此代码使用[captures, ...](arguments, ...) { code }
语法创建lambda。当您建立连接时,它会捕获string
和fret
变量值,然后在点击按钮时将其传递给testSlot
。
答案 1 :(得分:0)
您可以使用两种方法来添加字符串和音品信息。一种是使用sender()函数来获取发出信号的按钮。你可以访问fret和string,如果它们是你的按钮类的成员,那么你将拥有SLOT。
MyPushButton *button = (MyPushButton *)sender();
button.getFret();
button.getString();
然而,由于您已经在子类化QPushButton,您可以使用私有SLOT来捕获buttonClicked信号并重新发出具有正确值的信号。
在构造函数
中connect(this, SIGNAL(clicked()), this, SLOT(reemitClicked()));
然后重新发送SLOT
void MyPushButton::reemitClicked()
{
emit clicked(m_fret, m_string);
}
请务必向您的班级添加适当的私人广告位和公开信号 https://doc.qt.io/archives/qq/qq10-signalmapper.html看到这篇文章,就如何在信号中添加一个参数进行了很好的讨论。