我需要使用QWebKit重新实现JavaScript框架。目前我已经成功地从JavaScript调用C ++方法,但现在我需要注册一个JavaScript回调,并且能够从C ++调用它。
在原始系统(使用WebkitGTK制作)中,我构建了一个C函数,它接收一个对象作为参数。该对象是被称为回调的JavaScript函数。一个例子:
bool cb_function(param1, param2) {
alert("This is the callback, called with "+param1);
}
my_c_class.set_callback(cb_function);
在这里,我定义了* cb_function *回调,并将其发送到底层框架。然后,在C中,我使用JSObjectCallAsFunction()在需要时调用JavaScript函数,向它发送一些参数。
我需要知道的是如何使用QtWebKit来做到这一点。我假设第一部分需要使用Q_INVOKABLE方法(在本例中称为* set_callback *),该方法接收QObject或QVariant参数。这是对的吗?
现在第二部分:如何从C ++中调用存储在QObject或QVariant中的函数?
感谢!!!
答案 0 :(得分:0)
你不能真正将函数传递给C ++,并且你不能直接从C ++调用JavaScript函数。但是,您想要的是通过以下几种方式实现的:
你可以做的一件事是将一个JS函数“连接”到一个QObject信号上(有效地使它成为一个插槽 - 如果你习惯了Qt信号/插槽术语),然后从C ++中发出那个信号。将触发(有效地“调用”)JS函数 - 并可选地将其作为参数传递。
另一种(不太棒)的方法是使用QWebFrame的“evaluateJavaScript”方法来评估从JS上下文调用函数的字符串 - 假设它是全局范围内的函数,并且您知道它的名称。据推测,您可以将其名称传递给C ++方法,如您描述的“set_callback”,然后将该字符串传递给我之前提到的evaluate方法。