关于c ++:Qt自定义QPushButton单击信号

Qt custom QPushButton clicked signal

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

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


如果使用C ++ 11连接语法,则可以将lambda与stringfret参数一起调用testSlot来使用:

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

此代码使用[captures, ...](arguments, ...) { code }语法创建一个lambda。建立连接时,它将捕获stringfret变量值,然后在单击按钮时将其传递给testSlot


您可以使用两种方法来添加字符串和品格信息。一种是使用sender()函数来获取发出信号的按钮。如果它们是您的按钮类的成员,则可以访问快捷方式和字符串,因此在SLOT中就可以使用。

1
2
3
MyPushButton *button = (MyPushButton *)sender();
button.getFret();
button.getString();

但是,由于您已经对QPushButton进行了子类化,因此可以使用私有SLOT来捕获buttonClicked信号并重新发射具有正确值的信号。

在构造函数中

1
connect(this, SIGNAL(clicked()), this, SLOT(reemitClicked()));

然后重新放送SLOT

1
2
3
4
void MyPushButton::reemitClicked()
{
    emit clicked(m_fret, m_string);
}

确保为您的课堂添加适当的专用插槽和公共信号
https://doc.qt.io/archives/qq/qq10-signalmapper.html可以通过这篇文章很好地讨论在信号上添加参数的各种方法。