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