QML中一个signal调用多次的话,是不是在内存中唯一呢?



  • 假设有这样一个类Class,它有这样一个信号theSignal,不管这个theSignal是用C++实现的还是在QML中定义的,我想有一个函数会调用多次:

    property Class instance
    function calledMultipleTimes( )
    {
        instance.theSignal.connect( function ( ) { } );
    }
    

    问题是,这个回调函数会不会在内存中是唯一的呢?如果不是唯一的,是不是调用calledMultipleTimes函数n次,当信号theSignal发出的时候,是不是会同时调用这个函数n次呢?



  • @jiangcaiyang123

    这个问题很好解决。

    首先

     instance.theSignal.connect( function ( ) { } );
    

    这句话,每运行一次,就将一个新的函数链接到信号上。所以 calledMultipleTimes 调用几次,就链接几个匿名函数。

    如果想信号只触发一次这个匿名函数。

    可以如下:

    signal.connect(function(){
        signal.disconnect(arguments.callee); // callee 就是匿名函数。
        console.log("signal connect this lambda only once!");
    })
    


  • @qyvlik 这个结论是如何呢?:nerd:



  • @jiangcaiyang123 调用 calledMultipleTimes n 次,链接 n 个匿名函数,theSignal 触发一次,就有 n 个匿名函数被执行。



  • @qyvlik 好的,可是QML中的connect方法好像没有类似C++中第五个参数:Qt::UniqueConnection。看来要在handler函数中主动解除连接的关系了。我想要实现类似:

    instance.on( "someSignal", callback )
    

    这样的逻辑。


登录后回复
 

与 萌梦社区 的连接断开,我们正在尝试重连,请耐心等待