javascript調用qt

 在QtWebkit的javascript裏訪問QObject的最關鍵的關鍵就是下面這個方法:

void QWebFrame::addToJavaScriptWindowObject ( const QStringnameQObject * object )

我們要在js調用該QObject之前調用這個函數。 這個時機不好掌握, 不過我們可以按文檔的建議, 把這個函數放在一個signal的槽裏調用。 代碼如下:

///   in constructor  ///
connect(ui.webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(populateJavaScriptWindowObject()));
///   slot      ////
void FormExtractor::populateJavaScriptWindowObject()
{
ui.webView->page()->mainFrame()->addToJavaScriptWindowObject(“formExtractor”, this);
}

addToJavaScriptWindowObject的第一個參數是對象在javascript裏的名字, 可以自由命名, 第二個參數是對應的QObject實例指針。 這樣在javascript裏就可以直接訪問formExtractor對象拉, 就像在Qt裏訪問這個formExtractor一樣, 是不是看上去超級簡單? 當然事情不會總是怎麼簡單的。 如果我們翻開Qt文檔關於addToJavaScriptWindowObject的說明就會發現, 還有一點非常重要的內容在文檔中僅僅是一筆帶過, 不注意看很可能就錯過了重要的信息:

Make object available under name from within the frame’s JavaScript context. The object will be inserted as a child of the frame’s window object.

Qt properties will be exposed as JavaScript properties and slots as JavaScript methods.

有沒有意識到藍色字體顯示的這句話意味着什麼呢? 大概聰明的同學們都已經意識到了吧。 要想在js裏調用Qt的方法, 還有一個重要的條件需要滿足, 那就是把這個方法聲明爲槽函數, 普通的函數是不行的! 要想在js裏直接訪問到QObject的成員, 該成員必須定義爲屬性纔行!  而這個QObject不一定非得是QWidget, 可以是任何QObject及其派生類的實例。 滿足了上面的條件我們就可以在js裏調用formExtractor的函數啦:

<form οnsubmit=”formExtractor.submit()”>

這裏和調用任何js的變量和函數都是一致的, 具體看看js的語法就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章