我想写一个类似于以下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函数,但为此我需要构造一个函数名字+所有函数参数的字符串。
那么有没有更好的解决方案可用于此问题?
答案 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();
}
这不是一个好的设计,但你不能做得更好。