繁体   English   中英

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 function “测试”。 strFile 是 JavaScript 文件“simon2.js”的名称。 strScript 是 JavaScript 文件的内容,该文件包含 function test()。

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

    no matching member function for call to 'disconnect'

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

但是,您使用的特定connect形式返回QMetaObject::Connection object ,您可以存储它以供以后断开连接:

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

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

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

QObject::connect function 返回一个QMetaObject::Connection ,因此您可以将其传递给QObject::disconnect

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM