Qt自定义QPushButton点击信号

时间:2016-01-08 02:30:12

标签: c++ qt qpushbutton qt-signals

我想将两个整数(字符串和音品)发送到一个SLOT,它将处理按下的按钮的位置。 SIGNAL和SLOT参数必须匹配所以我认为我需要重新实现QPushButton :: clicked事件方法。问题是我是Qt的新手,可以使用一些方向。

connect(&fretBoardButton[string][fret], SIGNAL(clicked()), this, SLOT     (testSlot()));

2 个答案:

答案 0 :(得分:4)

如果您使用C++11 connection syntax,则可以使用带有testSlotstring参数的fret来电的lambda:

connect(&fretBoard[string][fret], &QPushButton::clicked, [this, string, fret]() {
    testSlot(string, fret);
});

此代码使用[captures, ...](arguments, ...) { code }语法创建lambda。当您建立连接时,它会捕获stringfret变量值,然后在点击按钮时将其传递给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看到这篇文章,就如何在信号中添加一个参数进行了很好的讨论。