Qt訊號 lamda 表示式使用

蔡头一枚發表於2024-03-22

對於Qt 訊號的繫結,有幾種方式:

1. 標準的SIGNAL和SLOT的繫結方式; 例如:

    connect(qApp, SIGNAL(focusChanged(QWidget *, QWidget *)),
            this, SLOT(focusChanged(QWidget *, QWidget *)));

// qApp 為傳送者, this類為接收者; focusChanged為傳送者傳送的訊號, focusChanged為接收者繫結的槽函式

2. 透過類名::函式的方式進行繫結, 例如:

connect(&SigForward::Get(), &SigForward::sigSwitchInputLanguage, this, &Keyboard::switchLanguage);

// SigForward::Get()為單例類,非指標物件,如果是指標,則不需&; 不一定需要單例類,看自己使用場景,第一個引數是地址;
// SigForward::sigSwitchInputLanguage為方法;注意: 這引數中&是必須要加;
//  this為接收物件, 也為地址;
//  Keyboard::switchLanguage為this類中的槽函式; 注意:這引數中&是必須要加;

3. 使用lamda表示式, 例如:

    connect(m_pBtnStopQA, &QPushButton::clicked, [=](){

    });

// [=] 為this類, ()裡面的引數為跟clicked裡面一樣; {}內實現是業務操作

相關文章