Czy można odłączyć funkcję lambda? A jeśli "tak", w jaki sposób?Odłączanie funkcji lambda w Qt5
Według https://qt-project.org/wiki/New_Signal_Slot_Syntax potrzebuję użyć QMetaObject::Connection
, który jest zwracany z metody QObject :: connect, ale jak mogę przekazać ten obiekt do funkcji lambda?
przykład Pseudo-kod:
QMetaObject::Connection conn = QObject::connect(m_sock, &QLocalSocket::readyRead, [this](){
QObject::disconnect(conn); //<---- Won't work because conn isn't captured
//do some stuff with sock, like sock->readAll();
}
Czy próbowałeś tego? (Ale także dodaj 'conn' do listy przechwytywania dla lambda) –
@JoachimPileborg Tak, to z jakiegoś powodu kruszywo. Jak tylko usunę połączenie QMetaObject :: Connection i zostawię tylko kod po tym, jak = zniknie błąd segfault. – alexandernst
Problem jest omawiany tutaj: http://stackoverflow.com/questions/13847507/qt5-new-signal-to-lambda-connections-memory-leak – kfunk