Тестирование лямбда-уникального соединения в Qt
Мой вопрос: как проверить, существует ли соединение в 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));
Это, однако, не работает, потому что лямбда-слот считается другим, чем тот, который я подключил в своем классе. Как мне проверить, существует ли это соединение?
1 ответ
Если я правильно понимаю ваш вопрос, вы можете легко проверить, существует ли соединение отправитель-лямбда с классом соединений QMetaObject. Вы можете определить 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