Qt World Summit: Register Today!

How to create a single-shot, one-time connection to a lambda?

  • I use the new Qt5 syntax and lambdas a lot, e. g.:

    connect(_textFadeOutAnimation, &QPropertyAnimation::finished, [this, text](){

    The problem I'm facing right now is I need this slot to only be fired once. Since there's no ConnectionType for that, I need to disconnect inside the slot, apparently. But how do I disconnect a lambda? I can't pass the QMetaObject::Connection inside the lambda for the obvious reason...

  • Hi @Violet-Giraffe,

    Interesting question.

    What about something like (untested):

    QMetaObject::Connection * const connection = new QMetaObject::Connection;
    *connection = connect(_textFadeOutAnimation, &QPropertyAnimation::finished, [this, text, connection](){
        delete connection;

  • @Paul-Colby, brilliant, that works! Thank you. It didn't occur to me Connection has an assignment operator.

  • This post is deleted!

Log in to reply