2012-03-26 65 views
0

我需要使用QWebKit重新實現JavaScript框架。目前我已經成功地從JavaScript調用C++方法,但現在我需要註冊一個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代替它。我假定第一部分需要使用接收QObject或QVariant參數的Q_INVOKABLE方法(在本例中稱爲* set_callback *)。這是正確的嗎?

現在第二部分:我如何從C++調用存儲在該QObject或QVariant中的函數?

謝謝!

回答

0

你不能真的把函數傳給C++,你不能直接從C++調用JavaScript函數。然而,你想要什麼可以通過幾種方法實現:

你可以做的一件事就是將一個JS函數「連接」到一個QObject的信號之一(有效地使它成爲一個插槽 - 如果你習慣了Qt信號/插槽術語),然後從C++發出該信號,這將觸發(有效地「調用」)JS函數 - 並可選地將其作爲參數傳遞。

另一種方法是使用QWebFrame的「evaluateJavaScript」方法來評估從JS上下文調用函數的字符串 - 只要它是全局範圍內的函數,並且您知道它的名稱即可。假設你可以將它的名字傳遞給C++方法,如你所描述的「set_callback」,然後將該字符串傳遞給前面提到的評估方法。

相關問題