[英]Expose C++ object to Javascript in Qt
有沒有什么方法可以將Q ++對象/函數公開給在Qt中的QtWebKit瀏覽器中運行的JavaScript? 可以將ActionScript對象暴露給在Adobe AIR中的WebKit瀏覽器內運行的JS代碼 - 我正在Qt中尋找類似的功能。
編輯:鏈接正在工作,但僅僅是因為理查德摩爾的鏈接突破[鏈接] ...
我在#qt和qt-interest上看到的一個問題是如何在QtWebKit中默認添加自定義(特定於應用程序)的API。 這實際上很簡單(一旦你知道如何),我將在下面顯示。 這篇文章將展示如何從javascript中提供對象的簡單示例,包括調用對象上的方法以及從C ++返回值。
為了執行這種集成,你真的需要知道兩件事,第一件是QWebFrame的addToJavaScriptWindowObject()方法,這允許從javascript中使指定的QObject可見。 你需要知道的第二件事是,每次清除javascript窗口對象時,以這種方式發布的對象都會消失 - 即。 每次用戶導航到新頁面。 為防止此問題導致問題,QWebFrame會提供一個信號,告訴您何時清除對象,允許您重新添加自定義API。 這實際上比聽起來簡單得多!
其核心實際上是在示例中的兩個方法中實現的,它們如下所示:
void MyApi::setWebView( QWebView *view )
{
QWebPage *page = view->page();
frame = page->mainFrame();
attachObject();
connect( frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()) );
}
void MyApi::attachObject()
{
frame->addToJavaScriptWindowObject( QString("MyApi"), this );
}
此代碼是您為了使MyApi對象的所有公共插槽對javascript可見所需的全部代碼。 MyApi類提供兩個公共插槽:
public slots:
void doSomething( const QString ¶m );
int doSums( int a, int b );
第一個插槽只是將消息記錄到調試輸出,第二個插槽返回其兩個參數的總和(是的,插槽可以返回東西!)。 他們是從這樣的javascript調用的:
MyApi.doSomething( 'Hello from JS page 2!!!!' );
sum = MyApi.doSums( 2, 3 );
alert( 'C++ says the sum is ' + sum );
這就是它的全部! 您可以從http://xmelegance.org/devel/qtwebkitextension.tar.gz下載代碼。
是。 看看這個。 這應該是一個好的開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.