【发布时间】:2013-02-12 08:49:11
【问题描述】:
是否可以断开 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();
}
【问题讨论】:
-
你试过了吗? (但也将
conn添加到 lambda 的捕获列表中) -
@JoachimPileborg 是的,它出于某种原因出现了段错误。一旦我删除 QMetaObject::Connection conn 并在 = 段错误消失后只留下代码。
-
@kfunk 我确实看到了这个问题,但我无法得出任何结论。您能否进一步解释一下如何以及为什么可以这样做?