Qt自定义QPushButton点击信号
Qt custom QPushButton clicked signal
我想将两个整数(string 和 fret)发送到一个 SLOT,该 SLOT 将处理按下的按钮的位置。 SIGNAL 和 SLOT 参数必须匹配,所以我想我需要重新实现 QPushButton::clicked 事件方法。问题是我是 Qt 的新手,可以使用一些指导。
connect(&fretBoardButton[string][fret], SIGNAL(clicked()), this, SLOT (testSlot()));
如果您使用 C++11 connection syntax,您可以使用 lambda 调用 testSlot
以及您的 string
和 fret
参数:
connect(&fretBoard[string][fret], &QPushButton::clicked, [this, string, fret]() {
testSlot(string, fret);
});
此代码使用 [captures, ...](arguments, ...) { code }
语法创建一个 lambda。当您建立连接时,它会捕获 string
和 fret
变量值,然后在单击按钮时将它们传递给 testSlot
。
您可以使用两种方法来添加弦乐和音品信息。一种是使用 sender() 函数获取发出信号的按钮。如果它们是您的按钮的成员,您可以访问品格和字符串 class 所以在 SLOT 中您将拥有。
MyPushButton *button = (MyPushButton *)sender();
button.getFret();
button.getString();
但是,由于您已经对 QPushButton 进行了子类化,因此您可以使用私有 SLOT 来捕获 buttonClicked 信号和 re-emit 具有正确值的信号。
在构造函数中
connect(this, SIGNAL(clicked()), this, SLOT(reemitClicked()));
然后重发SLOT
void MyPushButton::reemitClicked()
{
emit clicked(m_fret, m_string);
}
一定要添加适当的专用插槽并public向您发出信号class
https://doc.qt.io/archives/qq/qq10-signalmapper.html 请参阅这篇文章,了解有关向信号添加参数的各种方法的良好讨论。
我想将两个整数(string 和 fret)发送到一个 SLOT,该 SLOT 将处理按下的按钮的位置。 SIGNAL 和 SLOT 参数必须匹配,所以我想我需要重新实现 QPushButton::clicked 事件方法。问题是我是 Qt 的新手,可以使用一些指导。
connect(&fretBoardButton[string][fret], SIGNAL(clicked()), this, SLOT (testSlot()));
如果您使用 C++11 connection syntax,您可以使用 lambda 调用 testSlot
以及您的 string
和 fret
参数:
connect(&fretBoard[string][fret], &QPushButton::clicked, [this, string, fret]() {
testSlot(string, fret);
});
此代码使用 [captures, ...](arguments, ...) { code }
语法创建一个 lambda。当您建立连接时,它会捕获 string
和 fret
变量值,然后在单击按钮时将它们传递给 testSlot
。
您可以使用两种方法来添加弦乐和音品信息。一种是使用 sender() 函数获取发出信号的按钮。如果它们是您的按钮的成员,您可以访问品格和字符串 class 所以在 SLOT 中您将拥有。
MyPushButton *button = (MyPushButton *)sender();
button.getFret();
button.getString();
但是,由于您已经对 QPushButton 进行了子类化,因此您可以使用私有 SLOT 来捕获 buttonClicked 信号和 re-emit 具有正确值的信号。
在构造函数中
connect(this, SIGNAL(clicked()), this, SLOT(reemitClicked()));
然后重发SLOT
void MyPushButton::reemitClicked()
{
emit clicked(m_fret, m_string);
}
一定要添加适当的专用插槽并public向您发出信号class https://doc.qt.io/archives/qq/qq10-signalmapper.html 请参阅这篇文章,了解有关向信号添加参数的各种方法的良好讨论。