1. 程式人生 > >Qt開發-使用QWebEngineView開發一個簡易的瀏覽器(一)

Qt開發-使用QWebEngineView開發一個簡易的瀏覽器(一)

        簡單的一個程式,在之前文章的WebEngineView上增加了幾個小功能

        環境:Qt5.9.1 QtCreator Win7 環境配置:http://blog.csdn.net/m32692529/article/details/78788337

        新增的功能:

        1、顯示標題

        2、載入進度

        3、顯示網頁對應的圖示

        首先上圖,沒有做美化,介面美化跟功能後續根據需要慢慢完善。


        首先繫結QWebEngineView的幾個需要的訊號,在當前類實現槽函式。

        Widget.h

public slots:
    void slt_loadFinished(bool success);//載入完成
    void slt_titleChange(const QString & title);//標題改變
    void slt_iconChanged(const QPixmap & icon);//圖示改變
    void slt_loadProgress(int);//載入進度

        Widget.cpp
    connect(m_pWebEngineView,SIGNAL(loadProgress(int)),this,SLOT(slt_loadProgress(int)));
    connect(m_pWebEngineView,SIGNAL(loadFinished(bool)),this,SLOT(slt_loadFinished(bool)));
    connect(m_pWebEngineView,SIGNAL(titleChanged(QString)),this,SLOT(slt_titleChange(QString)));
    connect(m_pWebEngineView,SIGNAL(sig_iconChanged(QPixmap)),this,SLOT(slt_iconChanged(QPixmap)));

        槽函式實現
void Widget::slt_loadFinished(bool success){
    if (success && 100 != m_iProgress) {
        qDebug() << "slt_loadFinished progress is :" << m_iProgress;
    }
}

void Widget::slt_loadProgress(int progress){
    ui->progressBar->setValue(progress);

    if(progress == 100){
        ui->progressBar->hide();
    }
}

void Widget::slt_titleChange(const QString & title){
    ui->labelTitle->setText(title);
}

void Widget::slt_iconChanged(const QPixmap & pixmap){
    ui->labelIcon->setPixmap(pixmap);
}


        圖示下載

MyWebEngineView::MyWebEngineView(QWidget * parent)
    : QWebEngineView(parent)
{
    m_pNetworkAccessManager = new QNetworkAccessManager();
    connect(this,SIGNAL(iconUrlChanged(QUrl)),this,SLOT(slt_iconUrlChanged(QUrl)));

}

void MyWebEngineView::loadUrl(const QUrl & url){
    this->setUrl(url);
}

void MyWebEngineView::slt_iconUrlChanged(const QUrl & url){
    QNetworkRequest iconRequest(url);
    m_iconReply = m_pNetworkAccessManager->get(iconRequest);
    connect(m_iconReply, SIGNAL(finished()), this, SLOT(slt_iconloaded()));
}

void MyWebEngineView::slt_iconloaded(){
    if (m_iconReply) {
        QByteArray data = m_iconReply->readAll();
        QPixmap pixmap;
        pixmap.loadFromData(data);
        pixmap = pixmap.scaled(20,20,Qt::KeepAspectRatio , Qt::SmoothTransformation);
        emit sig_iconChanged(pixmap);

        m_iconReply->deleteLater();
        m_iconReply = 0;
    }
}


相關推薦

Qt開發-使用QWebEngineView開發一個簡易瀏覽器

        簡單的一個程式,在之前文章的WebEngineView上增加了幾個小功能         環境:Qt5.9.1 QtCreator Win7 環境配置:http://blog.csdn.net/m32692529/article/details/78788

讓我們開發一個瀏覽器

設計介面 開啟Qt設計師,新建一個Main Window,移除選單欄和狀態列,如下圖: 拖入一個Table Widget,MainWindow佈局設定為網格佈局,為了美觀,邊距都設定為0,如下圖:   寫程式碼 使用pyuic5命令將ui檔案裝成py檔案,生成完成

Qt5.9.1結合REF開發基於chorm的瀏覽器

編譯 ++ mar 建立 eat generate sha 設計 source 下載cef3的源碼 cef簡介   嵌入式Chromium框架(簡稱CEF) 是一個由Marshall Greenblatt在2008建立的開源項目,它主要目的是開發一個基於Google Chr

wxpython開發一個小遊戲

添加 title RR .text all SM add author tdi # _*_ coding: utf-8 _*___author__ = ‘pythonwu‘__date__ = "2018/5/13 21:33"import wximport osclass

從頭開發一個Flutter外掛開發流程

文章由來 在上一篇分享的文章Flutter 天氣應用裡我介紹了一個用flutter編寫的天氣預報app,裡面有一個需要完善的功能就是根據當前定位所在城市顯示天氣資訊。由於沒有辦法使用gms(google mobile service)的緣故,flutter官方提供的基於Google map的定位packag

使用Phaser開發你的第一個H5遊戲

本文來自網易雲社群 作者:王鴿 不知你是否還記得當年風靡一時的2048這個遊戲,一個簡單而又不簡單的遊戲,總會讓你在空閒時間玩上一會兒。 在這篇文章裡,我們將使用開源的H5框架——Phaser來重現這個遊戲。這裡你可以瞭解到遊戲內的狀態管理、Sprite元件物件等,以及如何使用Preload、Create

手把手教你用nginx開發自己的伺服器------利用nginx開發一個helloWorld程式

能開始學習nginx的你,肯定也擼了不少程式碼了,相信你學習程式碼都是從helloWorld開始的,那麼,今天我們就用nginx開發一個helloWorld,我們將要實現的功能就是當瀏覽器來訪問你的伺服器時,你的終端列印一個helloWorld。先別急著開始擼程式碼,先聊一聊

整理js開發中的實用小工具:做一個整合儲存的小工具

在開發工作中,常遇到程式碼重複開發的問題,比如一個分頁,左滑動等常見功能,而我們的解決辦法可能是這次寫一點,下次 copy 一點,如果不能解決問題,再改寫一點。若是沒有把可複用的程式碼抽離出來,做成一個通用的、可配置的小工具,私以為對技能的提升無益,所以在此立下個 flag,以後工作中遇到頻繁開發的功能

最簡單的混合APP開發框架——搭建你的第一個Ionic應用

上次寫了一篇關於Ionic3的文章,但是對於從來沒有接觸過Ionic的開發者來說,可能不是太友好。為了讓更多的人瞭解這個非常好的混合應用開發框架,今天這篇文章主要介紹如何從零用最快的時間做一個Ionic APP。 一)為什麼是Ionic? 如果你以前從來沒有

一個android專案開發遇到的各種小問題

1、map格式字串如何解析? 藉助json,先將字串轉化為json格式,再取值 JSONObject object = new JSONObject(posMap); clientIden = object.getString("iden"); ---------

Android應用開發:網絡工具——Volley

要求 com 庫文件 urn welcom 順序 之前 air tin 引言 網絡一直是我個人的盲點,前一陣子抽空學習了一下Volley網絡工具的用法,也透過源代碼進行了進一步的學習,有一些心得想分享出來。在Android開發中,成熟的網絡工具不少,And

Django開發小型站之前期準備

不同的 版本 mysqld 沒有 pycha 準備 pre 系統 解決問題 語言:python3.5 工具:JetBrains PyCharm virtualenvwrapper優點:   1、使不同的應用開發環境獨立   2、環境升級不影響其他應用,也不會影響全

轉發-Django開發小型站之前期準備

mysql模塊 需要 一個 3.5 查看 安裝mysql 不同的 方法 html 語言:python3.5 工具:JetBrains PyCharm virtualenvwrapper優點:   1、使不同的應用開發環境獨立   2、環境升級不影響其他應用,也不會影響全局

開發語言的程序加密方法

加密從各個開發語言出發,對每個開發語言的角度對加密方法做一些闡述。這篇主要講述lua、erlang、perl、ruby語言的加密方法。加密所需:Virbox LM SDK最新版Virbox Protector加殼工具,DS Protector 文檔下載:http://dl.video.virbox.com/v

MAC OS開發之從入門到崩潰

bsp 運行 shee 相關 .com nsh 彈出 add 區域 本文目標:通過xcode,創建一個Mac app程序。點擊按鈕,彈出Hello World窗口,其效果如下。 我們可以通過4個步驟來實現如上效果。 1.創建一個MAC app工程項目。 2.布局“按鈕”

嵌入式軟體開發 必須掌握的知識點有錯還望指點^_^

1、CPU對資料兩種儲存模式:小端儲存和大端儲存 (Little-Endian and  Big-Endian) 如整數0x12345678在記憶體中應該如下存放: 地低: base   | base+1   | base+2&n

django2.0+python3.4實戰開發教程-資訊型部落格系統

專案簡介 執行平臺:windows Python版本:3.4 Django版本:2.0 資料庫工具:sqlite 開發工具:Pycharm+sublime-text 寫在開頭:這是我第一次使用Django進行web開發,在此之前並無任何web開發經驗。其中,Django以及htm

MyEclipse開發教程:REST Web Service

MyEclipse 線上訂購年終抄底促銷!火爆開搶>> MyEclipse最新版下載 使用MyEclipse開發RESTWeb服務來放大您的Web應用程式。在本教程示例中,您將建立一個簡單的Web服務來維護客戶列表。你將學會: 用於開發REST Web服務的過程 部署到MyEc

《Android 開發藝術探索》讀書筆記——Activity 的生命週期和啟動模式

Activity 作為 Android 四大元件之首,它作為和使用者互動的介面,在開發中使用得可謂極其頻繁,所以弄清楚 Activity 的生命週期和啟動方式是非常重要的,要牢記。 1 Activity 的生命週期全面分析 1.1 典型情況下的生命週期分析 onCrea

Android開發常見異常與錯誤系列

一、前言 這系列文章是自己在平時開發過程中遇到的問題。之前只是記在雲筆記上面,現在整理一下,發出來共享。 ps:像那些什麼沒有註冊Activity呀,許可權呀等最基本的就不再贅述。 二、ADB連線異常 有時我們發現,即使自己從工作管理員裡面把adb.ex