簡體   English   中英

Qt5信號/插槽語法帶有過載信號和lambda

[英]Qt5 Signal/Slot syntax w/ overloaded signal & lambda

我正在使用信號/插槽連接的新語法。 它對我來說很好,除非我嘗試連接一個超載的信號。

MyClass : public QWidget
{
    Q_OBJECT
public:
    void setup()
    {
        QComboBox* myBox = new QComboBox( this );
        // add stuff
        connect( myBox, &QComboBox::currentIndexChanged, [=]( int ix ) { emit( changedIndex( ix ) ); } ); // no dice
        connect( myBox, &QComboBox::editTextChanged, [=]( const QString& str ) { emit( textChanged( str ) ); } ); // this compiles
    }
private:

signals:
    void changedIndex( int );
    void textChanged( const QString& );
};

不同的是currentIndexChanged被重載(int和const QString&types)但editTextChanged不是。 非過載信號連接良好。 超載的沒有。 我想我錯過了什么? 使用GCC 4.9.1,我得到的錯誤是

no matching function for call to ‘MyClass::connect(QComboBox*&, <unresolved overloaded function type>, MyClass::setup()::<lambda()>)’

您需要通過強制轉換來顯式選擇所需的重載:

connect(myBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=]( int ix ) { emit( changedIndex( ix ) ); });

從Qt 5.7開始,提供了方便的宏qOverload來隱藏轉換細節:

connect(myBox, qOverload<int>(&QComboBox::currentIndexChanged), [=]( int ix ) { emit( changedIndex( ix ) );

暫無
暫無

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

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