gpt4 book ai didi

javascript - JSFunction 作为 Qt 插槽中的参数?

转载 作者:行者123 更新时间:2023-12-02 20:28:02 25 4
gpt4 key购买 nike

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

那么有没有更好的解决方案可以解决这个问题?

最佳答案

不幸的是,目前在 QtWebKit 中不可能以更干净的方式做到这一点。我们已经做出了一些努力,在 QtScript 之上将完整的 JavaScript <-> C++ 绑定(bind)添加到 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();
}

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

关于javascript - JSFunction 作为 Qt 插槽中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com