0
爲什麼這不起作用?Qt信號/插槽和C++ Lambda表達式
繼承自QObject的類
b是Class子。
酒吧是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.
});
}
作爲第一次猜測,我認爲當插槽被調用時,酒吧不再存在。糾正它我需要通過價值來捕獲。
我知道了嗎?
改變了使其工作:
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