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与
1 2 3 | connect(&fretBoard[string][fret], &QPushButton::clicked, [this, string, fret]() { testSlot(string, fret); }); |
此代码使用
您可以使用两种方法来添加字符串和品格信息。一种是使用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可以通过这篇文章很好地讨论在信号上添加参数的各种方法。