日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Qt教程] 第40篇 网络(十)WebKit初识

發布時間:2024/4/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Qt教程] 第40篇 网络(十)WebKit初识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[Qt教程]?第40篇 網絡(十)WebKit初識

樓主 ?發表于 2013-9-11 17:26:05?|?查看: 521|?回復: 10
WebKit初識
版權聲明
該文章原創于作者yafeilinux,轉載請注明出處!

導語

WebKit是一個開源的瀏覽器引擎。Qt中提供了基于WebKit的QtWebKit模塊,它包含了一組相關的類。QtWebKit提供了一個Web瀏覽器引擎,使用它便可以很容易的將萬維網(WorldWide Web)中的內容嵌入到Qt應用程序中。與此同時,本地也可以對Web內容進行控制。QtWebKit可以呈現HTML(HyperTextMarkup Language,超文本標記語言)文檔、XHTML(Extensible HyperTextMarkup Language,可擴展超文本標記語言)文檔和SVG(Scalable VectorGraphics,可縮放矢量圖形)文檔,風格使用CSS(Cascading StyleSheets,層疊樣式表),腳本使用JavaScript。在JavaScript執行環境和Qt對象模型間搭建的橋梁,實現了使用WebKit的JavaScript環境訪問本地對象。關于這一點,大家可以在幫助中參考The QtWebKit Bridge關鍵字對應的文檔。通過整合Qt的網絡模塊,實現了從Web服務器、本地文件系統甚至Qt資源系統中透明的加載Web頁面。




環境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0



目錄

一、簡單應用 二、擴展應用



正文

一、簡單應用

下面我們來實現一個可以打開特定網頁的程序。新建空的Qt項目,在pro項目文件中添加一行代碼:QT += webkit,然后向項目中添加一個main.cpp文件,并在其中添加如下代碼: #include?<QWebView> #include?<QApplication> int?main(int argc, char* argv[]) { ? ??QApplication?a(argc,?argv); ? ??QWebView?view; ? ??view.load(QUrl("http://www.qter.org")); ? ??view.show(); ? ??return?a.exec(); }

要使用WebKit,就要先添加webkit模塊。QWebViewQtWebKit模塊主要的窗體部件,它可以在各種應用程序中用來顯示Internet上的網頁內容。QWebView作為一個窗口部件,可以嵌入到窗體或者圖形視圖部件中。

QWebView用來顯示Web頁面,每個QWebView實例都包含一個QWebPage對象。QWebPage提供了對一個頁面的文檔結構的訪問,描述了如框架(frame)、訪問歷史記錄和可編輯內容的撤銷/重做棧等特色。每一個QWebPage都包含一個QWebFrame對象作為它的主框架。在HTML中的每一個單獨的框架都可以使用QWebFrame來表示,這個類包含了到JavaScript窗口對象的橋梁,而且可以進行繪制。在QWebPage的主框架中可以包含很多的子框架。

HTML文檔中單獨的元素可以通過DOM JavaScript接口進行訪問,在QtWebKit中與這個接口等價的接口由QWebElement來表示。QWebElement對象可以使用QWebFrame的findAllElement()和findFirstElement()函數來獲取。一般的網頁瀏覽器的特色設置都可以通過QWebSettings類來配置,可以通過默認設置為所有的QWebPage實例提供默認值。單獨的屬性可以使用頁面指定的設置對象進行重寫。


二、擴展應用

下面再來看一個可以隨意更改網址并且可以顯示網站logo的例子。新建Qt Gui應用,項目名稱為“webview”,類名和基類保持“MainWindow”和“QMainWindow”不變。完成后向webview.pro文件中添加QT += webkit一行代碼,并按下Ctrl + S保存該文件。


1.下面到mainwindow.h文件中,先添加頭文件: #include?<QWebView> #include?<QLineEdit> 然后添加槽的聲明: protected?slots: ? ??void?changeLocation();? ???//?改變路徑 ? ??void?setProgress(int);? ???//?更新進度 ? ??void?adjustTitle();? ?? ???//?更新標題顯示 void finishLoading(bool);??// 加載完成后進行處理 再添加對象和變量定義: QWebView?*view; QLineEdit?*locationEdit; int?progress;


2.下面到mainwindow.cpp文件中,在構造函數中添加如下代碼:
  • progress = 0;
  • view = new QWebView(this);
  • setCentralWidget(view);
  • resize(800, 600);

  • // 關聯信號和槽
  • connect(view, SIGNAL(loadProgress(int)), this, SLOT(setProgress(int)));
  • connect(view, SIGNAL(titleChanged(QString)), this, SLOT(adjustTitle()));
  • connect(view, SIGNAL(loadFinished(bool)), this, SLOT(finishLoading(bool)));
  • locationEdit = new QLineEdit(this);
  • connect(locationEdit, SIGNAL(returnPressed()), this, SLOT(changeLocation()));

  • // 向工具欄添加動作和部件
  • ui->mainToolBar->addAction(view->pageAction(QWebPage::Back));
  • ui->mainToolBar->addAction(view->pageAction(QWebPage::Forward));
  • ui->mainToolBar->addAction(view->pageAction(QWebPage::Reload));
  • ui->mainToolBar->addAction(view->pageAction(QWebPage::Stop));
  • ui->mainToolBar->addWidget(locationEdit);

  • // 設置并加載初始網頁地址
  • locationEdit->setText("http://www.baidu.com");
  • view->load(QUrl("http://www.baidu.com"));
  • 復制代碼 QWebView開始加載時,會發射loadStarted()信號;而每當一個網頁元素(例如一張圖片或一個腳本等)加載完成時,都會發射loadProgress()信號;最后,當加載全部完成后,會發射loadFinished()信號,如果加載成功,該函數的參數為true,否則為false。可以使用title()來獲取HTML文檔的標題,如果標題發生了改變,將會發射titleChanged()信號。


    3.下面添加那幾個槽的定義: void?MainWindow::changeLocation() { ? ??QUrl?url?=?QUrl(locationEdit->text()); ? ??view->load(url); ? ??view->setFocus(); } void?MainWindow::setProgress(int p) { ? ??progress?=?p; ? ??adjustTitle(); } void?MainWindow::adjustTitle() { ? ??if?(?progress?<=?0?||?progress?>=?100)?{ ? ?? ??setWindowTitle(view->title()); ? ??}?else?{ setWindowTitle(QString("%1 (%2%)").arg(view->title()).arg(progress)); ? ??} } void?MainWindow::finishLoading(bool finished) { ? ??if?(finished)?{ ? ?? ??progress?=?100; ? ?? ??setWindowTitle(view->title()); ? ??}?else?{ ? ?? ??setWindowTitle("web page loading error!"); ? ??} }

    下面運行程序,效果如下圖所示:





    結語


    WebKit是一個很龐大的體系,我們這里只是講解了其最基本的應用,有興趣的朋友可以結合Qt文檔來進一步的學習。



    涉及到的代碼:??myweb.rar?(382 Bytes, 下載次數: 3)??webview.rar?(2.17 KB, 下載次數: 5)?

    總結

    以上是生活随笔為你收集整理的[Qt教程] 第40篇 网络(十)WebKit初识的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。