Qt中有两种类型的信号/插槽连接语义:
1
connect(sender, SIGNAL(mySignal()), receiver, [] { ... });
通常更可取,并支持与lambda函数的连接。如果在编译时未定义对象类型,则{{1}}是唯一的选项。正是这种情况下,使用c ++中的QtQuick对象。
有没有办法按名称将信号连接到lambda函数?像
这样的东西{{1}}
答案 0 :(得分:-1)
不可能用Qt中的信号槽实现方式。可以从两个对象和信号和插槽可用的任何地方调用Connect。元对象(在moc生成的文件中定义)必须能够获得指向声明为slot的函数的指针,以添加指向事件表的指针。实际上甚至在lambda函数中捕获Qt对象可能是有害的,除非你通过引用捕获它们。 Qt不是围绕C ++ 11意识形态而设计的,更多的是,Qt库的容器实现了一个本质上是UB(未定义的行为):像“这大部分时间都有效”的评论暗示了这一点。
您可以尝试使用QObject :: connect函数连接到lambda:
<div class="ajax" >
<img src="https://www.w3schools.com/html/pic_mountain.jpg"/>
<p>Hello, world!</p>
</div>
$(document).ready(function(){
$.colorbox({inline:true, href:".ajax"});
});
但要注意Qt的哪个版本以及你正在使用它的范围,旧的Qt 5.x版本泄漏了:请参阅Qt leaks on connecting to lambda。并且只能连接到捕获全局范围对象的lambda,或者保证比callerObject更长寿的范围。