是否可以断开 lambda 函数?如果“是”,怎么做?
根据 https://qt-project.org/wiki/New_Signal_Slot_Syntax 我需要使用从 QObject::connect 方法返回的 QMetaObject::Connection
,但是我怎样才能将该对象传递给 lambda 函数?
伪代码示例:
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();
}
原文由 alexandernst 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您直接捕获
conn
,您将通过复制捕获未初始化的对象,这会导致未定义的行为。您需要捕获一个智能指针:或者使用共享指针,开销稍大:
从 Qt 5.2 你可以改为使用上下文对象: