[英]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.