Тестирование лямбда-уникального соединения в Qt - PullRequest
0 голосов
/ 27 июня 2019

Мой вопрос: как проверить, существует ли соединение в 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 Ответ

0 голосов
/ 28 июня 2019

Если я правильно понимаю ваш вопрос, вы можете легко проверить, существует ли соединение отправитель-лямбда с классом соединений 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...