これはなぜ機能しませんか?Qtシグナル/スロットとC++ラムダ式
クラスはQObjectから継承します
bはクラスの子です。
barはFooの子です。
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.
});
}
まず、スロットが呼び出されたときにバーが存在しなくなったと思います。それを修正するために、私は価値あるものを捉える必要があります。
私はそれを正しくしていますか?それを動作させる
CHANGES:
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.
});
}
'Foo :: getBar'とは何ですか? – LogicStuff
これはBar *を作成し、その親をFooに設定します。 –
おそらく、信号が呼び出されたときに 'bar'はもはや有効ではないからです。 – Jepessen