簡體   English   中英

Qt自定義QPushButton點擊信號

[英]Qt custom QPushButton clicked signal

我想將兩個整數(字符串和品格)發送到SLOT,該SLOT將處理按下的按鈕的位置。 SIGNAL和SLOT參數必須匹配,所以我想我需要重新實現QPushButton :: clicked事件方法。 問題是我是Qt的新手,可以使用一些指導。

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

如果您使用C ++ 11連接語法 ,您可以使用與呼叫拉姆達testSlotstringfret參數:

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

此代碼使用[captures, ...](arguments, ...) { code }語法創建一個lambda。 當您連接它抓住了stringfret變量的值,然后將它們傳遞給testSlot按鈕被按下時。

您可以使用兩種方法來添加字符串和品格信息。 一種是使用sender()函數來獲取發出信號的按鈕。 如果它們是您的按鈕類的成員,則可以使用訪問品格和字符串,因此在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上看到適當的專用插槽和公共信號,以了解有關在信號上添加參數的各種方法的良好討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM