2017-04-20 48 views
2

,我打算给QDoubleSpinBox信号连接到C++ 11 LAMDA:信号连接到C++ 11个lambda表达式在QT5

QObject::connect(sbox_roughness, &QDoubleSpinBox::valueChanged, 
       [=]() { std::cout << "value changed" << std::endl; }); 

这是给我:

error: no matching function for call to ‘Game::connect(QDoubleSpinBox*&, <unresolved overloaded function type>, Game::initGui()::<lambda()>)’ 
       [=]() { std::cout << "value changed" << std::endl; }); 
note: no known conversion for argument 2 from ‘<unresolved overloaded function type>’ to ‘const char*’ 

我已经试图this

QObject::connect(sbox_roughness, static_cast<void (QDoubleSpinBox::*)(int)>(
            &QDoubleSpinBox::valueChanged), 
       [=]() { std::cout << "value changed" << std::endl; }); 

给我:

我在这里错过了什么?

回答

1
QDoubleSpinBox spinbox; 

QObject::connect(&spinbox, &QDoubleSpinBox::valueChanged, 
       []() { qDebug() << "value changed"; }); 

失败的原因是QDoubleSpinBox有两个valueChanged信号,这是不可能决定你想连接到这里哪一个。

QObject::connect(&spinbox, static_cast<void (QDoubleSpinBox::*)(int)>(
            &QDoubleSpinBox::valueChanged), 
       []() { qDebug() << "value changed"; }); 

失败的原因是QDoubleSpinBox没有valueChanged(int)信号。

这将工作:

QObject::connect(&spinbox, static_cast<void (QDoubleSpinBox::*)(double)>(
            &QDoubleSpinBox::valueChanged), 
       []() { qDebug() << "value changed"; }); 

QObject::connect(&spinbox, static_cast<void (QDoubleSpinBox::*)(const QString &)>(
            &QDoubleSpinBox::valueChanged), 
       []() { qDebug() << "value changed"; }); 
+0

因为它不起作用:(QDoubleSpinBox :: *)(** int **)>(&QDoubleSpinBox :: valueChanged)。对不起,监督这个!好答案! –

1

你面临的争论错配。应该是这样的:

QObject::connect(sbox_roughness, static_cast<void(QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), 
      [=](double val) { std::cout << "value changed" << std::endl; }); 
+0

您的回答他们改成一个我。 – eyllanesc