У меня есть "нормальный" (не производный от qt) класс. Он получает ссылку на QObject. Внутри этого класса я хочу соединить входной сигнал QObject с лямбдой.
Пока все хорошо, все работает отлично, за исключением случаев, когда объект моего класса уничтожается перед передачей в QObject. Сигнал от QObject теперь указывает на лямбду, которая больше не существует.
Обычный способ сделать это - мой класс наследует от QObject и передает this
в качестве контекста connect
. Затем соединения будут автоматически уничтожены кодом Qt, когда мой объект умрет.
Еще один способ решения этой проблемы - сохранить возвращаемый результат соединения, a QMetaObject::Connection
, а затем в деструкторе моего класса вызвать QObject::disconnect(resultOfConnect)
.
Теперь, как я хотел решить это так:
class SomeQtDerivedClass : public QObject {...}
class MyClass
{
public:
MyClass(SomeQtDerivedClass& qtObject)
{
connect(&qtObject, &qtObject::someSignal, &m_QtObject, [](){blahblah})
}
private:
QObject m_QtObject;
}
Я не видел, чтобы этот шаблон использовался где-либо, и я не могу найти ничего в официальной документации об этом подходе. Я не хочу наследовать от QObject, если вместо этого я могу использовать композицию. Я не хочу создавать m_QtObject в куче, если я могу создать его в стеке. И я хочу, чтобы соединение было автоматически уничтожено, если мой объект класса был уничтожен до введенного QObject.
Будет ли это работать?