繁体   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