1. 程式人生 > >Qt Webengine Widget常見問題

Qt Webengine Widget常見問題

t Webengine Widget常見問題
Author: kagula
LastUpdate: 2015-09-25
Environment:
 [1]Qt5.4、Qt5.5
 [2]Visual studio 2013 Update5
 [3]QT Plugin 1.2.4


注意:
 [1]發現和中文輸入法有相容性問題,感覺需要修改render_widget_host_view_qt_delegate_widget.cpp檔案來解決。


 [2]若碰到Cannot open include file: 'QtWebEngineWidgets'的問題
 則把“C:\Qt\5.4\msvc2013\include\QtWebEngineWidgets”加入到標頭檔案搜尋路徑中。
 新增下面兩個lib檔案的連結。
 Qt5WebEngined.lib
 Qt5WebEngineWidgetsd.lib
 這裡假設你用的是Qt5.4。
 
 [3]最簡單的呼叫“Webegine”的示例程式碼段如下:

#include <QtWebEngineWidgets>
#include <QSizePolicy>


Erp2013::Erp2013(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);


view = new QWebEngineView(this);
view->load(QUrl("http://www.baidu.com"));
//setCentralWidget(view);
//view->setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
ui.verticalLayout->addWidget(view);
}
  [4]html/js如何同C++程式碼互動,參考資料[4]

   但是必須注意以下幾點事項:
   [4-1]
   假設我把index.html重新命名為index2.html,"qwebchannel.js"檔案放在了D:/nginx-1.8.0/html/目錄下面。
   如果找不到“qwebchannel.js”檔案可以從下面地址下載:http://code.qt.io/cgit/qt/qtwebchannel.git/tree/src/webchannel/qwebchannel.js
   [4-2]修改standalone例子main.cpp的"fromLocalFile"那行程式碼為下面的樣子。
   QUrl url = QUrl::fromLocalFile("D:/nginx-1.8.0/html/index2.html");
   [4-3]下面這段程式碼是Qt呼叫系統預設瀏覽器開啟上面的超級連結
    QUrl url = QUrl::fromLocalFile("D:/nginx-1.8.0/html/index2.html");
    url.setQuery(QStringLiteral("webChannelBaseUrl=") + server.serverUrl().toString());//奇怪這行程式碼沒起作用
    QDesktopServices::openUrl(url);
   [4-4]程式跑起來後,在Web瀏覽器中,你會發現“webChannelBaseUrl”引數沒有正確傳遞。
   你需要把下面的字串在瀏覽器中再打一次:
   "file:///D:/nginx-1.8.0/html/index2.html?webChannelBaseUrl=ws://127.0.0.1:12345"
   [4-5]現在你瀏覽器中的頁面應該和你standalone程式相互通訊了。
   [4-6]檢視js程式碼,我把QWebChannel註冊時的“dialog”改為“Erp2013”,下面html中的程式碼
   由
   window.dialog = channel.objects.dialog;
   相應改為了如下:
   window.Erp2013 = channel.objects.Erp2013;
   類似,把html中dialog名改為了Erp2013.


  [5]如何呼叫js函式?

  QString code = QString::fromLocal8Bit("alert('呼叫Java function的測試')");
  view->page()->runJavaScript(code);
 
參考資料
[1]《Qt WebEngine Widgets》
http://doc.qt.io/qt-5/qtwebenginewidgets-index.html
[2]《Qt下載》
http://www.qt.io/download-open-source/
[3]《Qt WebEngine Widgets C++ Classes》
http://doc.qt.io/qt-5/qtwebenginewidgets-module.html
[4]《standalone例子》
http://doc.qt.io/qt-5/qtwebchannel-standalone-example.html