Qt自定义QPushButton点击信号

Qt custom QPushButton clicked signal

本文关键字:信号 QPushButton 自定义 Qt      更新时间:2023-10-16

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

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

如果使用C++11连接语法,则可以使用lambda来调用带有stringfret参数的testSlot

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

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

有两种方法可以用来添加字符串和fret信息。一种是使用sender()函数来获取发出信号的按钮。如果他们是你的按钮类的成员,你可以访问fret和string,所以在SLOT中你会有。

MyPushButton *button = (MyPushButton *)sender();
button.getFret();
button.getString(); 

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

在构造函数中

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

然后再发射时隙

void MyPushButton::reemitClicked()
{
    emit clicked(m_fret, m_string);
}

请确保为您的类添加适当的专用插槽和公共信号https://doc.qt.io/archives/qq/qq10-signalmapper.html关于在信号中添加自变量的各种方法,请参阅本文。