Qt连接有效,等效的断开连接方法是什么?

Qt connect works, what is the equivalent disconnect method?

我有一个可以工作的连接,它将 C++ 中的信号连接到 JavaScript 中的插槽:

    Object::connect(this, &clsQtPushBtn::clicked
                   ,[pobjScriptEng, strCall, strFile, strScript]() {
                       QString strScriptWithCall = static_cast<QString>(strStript)
                                                 + static_cast<QString>(strCall) + "();";
                       pobjScriptEng->evaluate(strScriptWithCall);
                   });

在上面的代码中:

这是我的 PushButton class clsQtPushBtn 的一个实例。 clsQtPushBtn::clicked 是 "clicked" 信号的地址。 pobjScriptEng 是指向 QJSEngine* 实例的指针。 strCall 是一个 JavaScript 函数 "test"。 strFile 是 JavaScript 文件 "simon2.js" 的名称。 strScript 是包含函数 test() 的 JavaScript 文件的内容。

问题是如何进行等效的断开连接调用,因为我遇到了困难,有 7 个选项,只是将连接更改为断开连接不起作用,我得到:

    no matching member function for call to 'disconnect'

通常,您只需提供与 connect 调用中相同的详细信息(例如,源对象和目标对象、源信号和目标槽)。

但是,特定的 connect 形式你正在使用 returns 一个 QMetaObject::Connection 对象,你可以存储它以供以后断开连接:

auto connection = Object::connect(this, &clsQtPushBtn::clicked, blah, blah);
:
QObject::disconnect(connection);

这很可能是一种更好的方法,因为它可以立即获取信息,而不是在可能很大的列表中搜索连接(尽管我对它的实现方式可能有误).它 特别是 更好,因为我相信在这种情况下它是 only 选项,看到每个 lambda 都是唯一的,所以你不能使用新的无论如何都要找到旧连接。

此外,我使用了局部变量来存储它,但您最好将其存储到某种成员变量中。

QObject::connect function returns a QMetaObject::Connection so you can pass it to QObject::disconnect.