我使用信号/插槽连接的新语法。它对我来说很好,除非我试图连接一个超载的信号。
explain
不同之处在于currentIndexChanged是重载的(int和const QString& types),但editTextChanged不是。非过载信号连接良好。超负荷的人不会。我想我错过了什么?使用GCC 4.9.1,我得到的错误是
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& );
};
答案 0 :(得分:10)
您需要通过以下方式显式选择所需的重载:
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 ) );