JSFunction作为Qt槽中的参数?

时间:2010-12-26 05:56:05

标签: javascript qt qtwebkit

我想写一个类似于以下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函数,但为此我需要构造一个函数名字+所有函数参数的字符串。

那么有没有更好的解决方案可用于此问题?

1 个答案:

答案 0 :(得分:2)

不幸的是,此时在QtWebKit中以更清洁的方式做到这一点是不可能的。已经做了一些努力来添加完整的JavaScript< - > Qt绑定到QtWebKit,在QtScript之上,但我不确定它的进展是什么。

这意味着你留下了你提到的两个解决方案(但我强烈建议避免使用第一个,因为它是hackish并且不能与匿名函数对象一起工作)。

另一个解决方案是创建两个信号: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();
}

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