Có thể ngắt kết nối chức năng lambda không? Và nếu "có", làm thế nào?Ngắt kết nối các chức năng lambda trong Qt5
Theo https://qt-project.org/wiki/New_Signal_Slot_Syntax Tôi cần sử dụng QMetaObject::Connection
được trả về từ phương pháp kết nối QObject :: nhưng sau đó làm cách nào để chuyển đối tượng đó vào hàm lambda?
Pseudo-code ví dụ:
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();
}
Bạn đã thử chưa (Nhưng cũng thêm 'conn' vào danh sách chụp cho lambda) –
@JoachimPileborg Có, nó segfaults vì một lý do nào đó. Ngay sau khi tôi loại bỏ các kết nối QMetaObject :: conn và chỉ để lại mã sau khi segfault = segfault. – alexandernst
Sự cố được thảo luận tại đây: http://stackoverflow.com/questions/13847507/qt5-new-signal-to-lambda-connections-memory-leak – kfunk