0

我想写一个类似于以下javascript的Qt插槽,

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 函数,但是为此我需要构造一个函数名字符串 + 所有函数参数。

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

4

1 回答 1

2

不幸的是,目前不可能在 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();
}

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

于 2010-12-26T12:15:21.440 回答