Russian Qt Forum

Qt => Вопросы новичков => Тема начата: arhiv6 от Август 04, 2017, 11:50



Название: Лябда-слоты с перезагрузкой - синтаксис ещё не поменялся?
Отправлено: arhiv6 от Август 04, 2017, 11:50
Возможность использования лямбда-функций в качестве слотов в Qt есть уже несколько лет. Но в случае перезагрузки код получается ужасным. Например:
Код:
 connect(mySocket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error), [ = ] (QAbstractSocket::SocketError error)
 {
     // some code
 });
Может быть уже есть способ записать тоже самое, но более человеческим языком?


Название: Re: Лябда-слоты с перезагрузкой - синтаксис ещё не поменялся?
Отправлено: Johnik от Август 04, 2017, 11:58
а так?
Код
C++ (Qt)
connect<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(mySocket, &QAbstractSocket::error, [ = ] (QAbstractSocket::SocketError error)
{
    // some code
});


Название: Re: Лябда-слоты с перезагрузкой - синтаксис ещё не поменялся?
Отправлено: ViTech от Август 04, 2017, 12:33
Может быть уже есть способ записать тоже самое, но более человеческим языком?

Selecting Overloaded Signals and Slots (http://doc.qt.io/qt-5/signalsandslots-syntaxes.html#selecting-overloaded-signals-and-slots).


Название: Re: Лябда-слоты с перезагрузкой - синтаксис ещё не поменялся?
Отправлено: arhiv6 от Август 04, 2017, 14:00
Спасибо! Такой код проще читается:
Код:
connect(mySocket, qOverload<QTcpSocket::SocketError>(&QTcpSocket::error), [ = ](QTcpSocket::SocketError error)
 {
     // some code
 });