2016-03-28 5 views
1

Я изучаю C++ Qt. А теперь попробуйте использовать функцию лямбда с connect:Не удается правильно позвонить `connect`

connect(ui->sbNormal, &QSpinBox::valueChanged, [=] (int x) {}); 

она выдавала ошибку:

error: no matching function for call to 'MainWindow::connect(QSpinBox*&, < unresolved overloaded function type>, MainWindow::MainWindow(QWidget*)::< lambda(int)>)'});

Что я сделал не так? Как указать необходимую перегрузку?

+0

Что такое сигнатура функции, которую вы пытаетесь вызвать? Я бы предположил, что он принимает указатель на функцию? – NathanOliver

+0

'void valueChanged (int)' и 'void valueChanged (const QString &)'. Мне нужно tocall first –

+0

Я имел в виду функцию 'connect' – NathanOliver

ответ

4

В случае, если есть несколько перегруженных, вы должны указать, что вы хотите вручную:

connect(ui->sbNormal, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
     [=] (int x) {}); 
+0

Спасибо! Я тоже это нашел) Просто я не знал, что C++ может использовать функцию. –

+1

Ужасный синтаксис действительно, но что вы можете сделать ... – dtech

+0

Главное, чтобы он работал) –

Смежные вопросы