【问题标题】:JSFunction as parameter in Qt slot?JSFunction 作为 Qt 插槽中的参数?
【发布时间】:2010-12-26 05:56:05
【问题描述】:

我想写一个类似下面javascript的Qt slot,

function testFunc( func1,func2,cond )
{
   if ( cond == 1)
   {
            func1();
   }
  else
  {
           func2();
  }
}

我的问题是:

1)。如何接收 Javascript 函数作为参数?
2)。如何再次从 C++ 调用相同的 JS 函数。

这是我的非高效解决方案,

对于 Q.1-> 将 JSFunction 参数作为 QString 给了我完整的函数代码,所以在这种情况下,我需要编写代码来从那里提取函数名称。

对于 Q.2-> 我可以通过 QWebFrame::evaluateJavaScript 调用 JS 函数,但是为此我需要构造一个函数名字符串 + 所有函数参数。

那么对于这个问题有没有更好的解决方案呢?

【问题讨论】:

    标签: javascript qt qtwebkit


    【解决方案1】:

    不幸的是,目前不可能在 QtWebKit 中以更简洁的方式做到这一点。在 QtScript 的基础上,已经努力将完整的 JavaScript C++ 绑定添加到 QtWebKit,但我不确定这方面的进展如何。

    这意味着你只剩下你提到的两种解决方案(但我强烈建议避免使用第一种,因为它很老套,并且不适用于匿名函数对象)。

    另一种解决方案是创建两个信号:conditionSatisfied() 和 conditionFailed(),并将它们分别连接到 func1、func2:

    function func1() { ... }
    function func2() { ... }
    
    object.conditionSatisfied.connect(func1);
    object.conditionFailed.connect(func2);
    

    然后,在 C++ 方面:

    void X::testFunc(const QVariant& cond)
    {
        if (cond.toInt() == 1)
            emit conditionSatisfied();
        else
            emit conditionFailed();
    }
    

    这不是一个好的设计,但你不能做得更好。

    【讨论】:

    • @Sunny: object.conditionSatisfied.connect(function() { ... });
    • 哦!好的。谢谢Jakub,我会检查的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2019-10-09
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多