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.
我有一个可以工作的连接,它将 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.