1

我的问题是:当插槽是 lambda 函数时,如何检查 Qt 中是否存在连接?

我有以下代码片段

connect(item1, &Item::somethingChanged, this, [this](){ doSomething(m_someObject1, 2); }, Qt::DirectConnection);

connect(item2, &Item::somethingChanged, this, [this](){ doSomething(m_someObject2, 5); }, Qt::DirectConnection);

我想检查我的 GoogleTest 中是否存在此连接:

ASSERT_FALSE(QObject::connect(item1, &Item::somethingChanged, this, [this](){ doSomething(m_someObject1, 2); }, Qt::UniqueConnection));

但是,这不起作用,因为 lambda 插槽被认为是与我在班级本身中连接的不同的 lambda。我将如何检查此连接是否存在?

4

1 回答 1

0

如果我正确理解您的问题,您可以轻松检查是否存在 sender-lambda 连接/是否与 QMetaObject 的 Connection 类连接。您可以定义一个QMetaObject::Connection变量(比如说QMetaObject::Connection ourConnection)并将其值设置为连接。该变量现在是该连接的句柄。

如果ourConnection设置为正在运行的连接实例,它将返回 true:

QMetaObject::Connection ourConnection = connect(ui->ourAction, &QAction::triggered, this, []{
     // Do stuff;
});
qDebug() << ourConnection; // returns true

如果ourConnection设置为断开连接的实例,它将返回 false:

QMetaObject::Connection ourConnection = connect(ui->ourAction, &QAction::triggered, this, []{
     // Do stuff;
});
disconnect(ourConnection);
qDebug() << ourConnection; // returns false

如果ourConnection根本没有设置为连接实例,它将返回 false:

QMetaObject::Connection ourConnection;
qDebug() << ourConnection; // returns false
于 2019-06-28T01:21:34.823 回答