在QtWebkit的javascript裏訪問QObject的最關鍵的關鍵就是下面這個方法:javascript
void QWebFrame::addToJavaScriptWindowObject ( const QString &name,QObject *object )html
咱們要在js調用該QObject以前調用這個函數。 這個時機很差掌握, 不過咱們能夠按文檔的建議, 把這個函數放在一個signal的槽裏調用。 代碼以下:java
/// in constructor ///
connect(ui.webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(populateJavaScriptWindowObject()));
///slot////
void FormExtractor::populateJavaScriptWindowObject()
{
ui.webView->page()->mainFrame()->addToJavaScriptWindowObject(「formExtractor」, this);
}web
addToJavaScriptWindowObject的第一個參數是對象在javascript裏的名字, 能夠自由命名, 第二個參數是對應的QObject實例指針。緩存
這樣在javascript裏就能夠直接訪問formExtractor對象拉, 就像在Qt裏訪問這個formExtractor同樣, 是否是看上去超級簡單? 固然事情不會老是怎麼簡單的。函數
若是咱們翻開Qt文檔關於addToJavaScriptWindowObject的說明就會發現, 還有一點很是重要的內容在文檔中僅僅是一筆帶過, 不注意看極可能就錯過了重要的信息:ui
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.this
Qt properties will be exposed as JavaScript properties and slots as JavaScript methods.指針
有沒有意識到上面顯示的這句話意味着什麼呢? 大概聰明的同窗們都已經意識到了吧。orm
要想在js裏調用Qt的方法, 還有一個重要的條件須要知足, 那就是把這個方法聲明爲槽函數(並且是public槽), 普通的函數是不行的!
要想在js裏直接訪問到QObject的成員, 該成員必須定義爲屬性才行!?? 而這個QObject不必定非得是QWidget, 能夠是任何QObject及其派生類的實例。
知足了上面的條件咱們就能夠在js裏調用formExtractor的函數啦:
<form onsubmit=」formExtractor.submit()」>
這裏和調用任何js的變量和函數都是一致的, 具體看看js的語法就好了。
http://blog.sina.com.cn/s/blog_671732440100utzp.html
讓QtWebKit使用緩存
QNetworkDiskCache *diskCache=newQNetworkDiskCache(this);
QString location=QDesktopServices::storageLocation(QDesktopServices::CacheLocation);
diskCache->setCacheDirectory(location);
this->ui->wndHtmlView->page()->networkAccessManager()->setCache(diskCache);
QDesktopServices::storageLocation(QDesktopServices::CacheLocation);返回的是系統的緩存目錄的路徑
http://blog.sina.com.cn/s/blog_671732440100utyl.html