2014-01-24 2 views
2

Я пытаюсь использовать это утверждение. Я использую QT 5.1 в VS2012QT: Использование lambda в операторе connect - VS2012

connect(ui.pushButton_next, SIGNAL(clicked()), []{ 
    std::cout << "clicked" << std::endl; 
}); 

я

ошибка C2664: «QMetaObject :: Подключение QObject :: Connect (Уст QObject *, Const символ *, константный символ *, Qt: : ConnectionType) const ': не может преобразовать параметр 3 из ' newAccount :: {ctor} :: 'to ' const char * '1> Нет оператора пользовательского преобразования , который может выполнять это преобразование, или оператор не может be

Любое предложение о том, что я могу делать неправильно?

+1

Не 'ui' указатель? И НЕТ, вы не можете использовать старый синтаксис с лямбдой, вам нужно использовать новый синтаксис подключения. – dtech

+0

ui - это объект, который имеет указатель pushbutton_next – MistyD

+0

. Вы не используете конструкторскую форму, потому что 'ui', который Qt генерирует в таких случаях, является указателем. – dtech

ответ

4

Looking at the documentation, перегрузки метода подключения, которые поддерживают макросы SIGNAL и SLOT, как представляется, не принимают объект Functor - это поддерживается только this overload, который принимает функцию PointerToMemberFunction.

Правильный синтаксис для вашего кода:

connect(ui.pushButton_next, &QObject::clicked, []{ 
    std::cout << "clicked" << std::endl; 
}); 
Смежные вопросы