簡體   English   中英

在Qt中將C ++對象暴露給Javascript

[英]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 &param );
    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM