Pourquoi cela ne fonctionne pas?Signal Qt/slots et expression Lambda C++
Hériter de classe de QObject
b est adapté aux enfants de classe.
La barre est Foo enfant.
void Class::method(Foo& b) {
Bar* bar = b.getBar();
QObject::connect(bar, &Bar::s1, [&]{
auto x = bar->x(); // this line throw an exception read access violation.
});
}
Comme première estimation, je pense que la barre n'est plus exister lorsque la fente est appelée. pour le corriger, j'ai besoin de capturer en valeur.
Est-ce que je comprends bien?
CHANGEMENTS À L'OEUVRE:
void Class::method(Foo& b) {
Bar* bar = b.getBar();
QObject::connect(bar, &Bar::s1, [bar]{
auto x = bar->x(); // this line throw no more exceptions and work as expected.
});
}
Qu'est-ce que 'Foo :: getBar'? – LogicStuff
crée une barre * et définit son parent sur Foo. –
Probablement parce que 'bar' n'est plus valide lorsque le signal est appelé. – Jepessen