欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QT的QWebEngineView類知識(shí)點(diǎn)詳細(xì)介紹

 更新時(shí)間:2024年10月12日 09:14:46   作者:小小怪同學(xué)の  
QWebEngineView是Qt框架中的組件,基于Chromium內(nèi)核,支持HTML5、CSS3、JavaScript等Web技術(shù),適用于嵌入網(wǎng)頁內(nèi)容到Qt應(yīng)用程序,它提供了豐富的接口如加載、導(dǎo)航、與JavaScript交互等,并支持信號(hào)槽機(jī)制處理各種網(wǎng)頁事件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、QWebEngineView介紹

QWebEngineView是Qt框架中的一個(gè)組件,它是基于Chromium內(nèi)核的Web瀏覽器引擎,用于在Qt應(yīng)用程序中嵌入網(wǎng)頁內(nèi)容和實(shí)現(xiàn)各種Web應(yīng)用功能。通過QWebEngineView,開發(fā)者可以在本地桌面應(yīng)用程序中輕松地集成網(wǎng)頁瀏覽功能,支持HTML5、CSS3、JavaScript等現(xiàn)代Web技術(shù)。

注意:QWebEngineView類僅支持QT的5.4版本以上,之前的版本都是使用QtWebKit,QtWebKit類在5.4版本以上已經(jīng)被丟棄了,不能使用了。而對(duì)于QWebEngineView類,僅僅支持MSVC的編譯器并不支持MinGW。

加載并顯示網(wǎng)頁內(nèi)容。

與網(wǎng)頁中的JavaScript進(jìn)行交互。

監(jiān)聽和處理網(wǎng)頁加載完成、加載失敗等各種信號(hào)槽事件。

實(shí)現(xiàn)網(wǎng)頁導(dǎo)航控制(前進(jìn)、后退、刷新)等功能。

在Qt Quick中,對(duì)應(yīng)的功能類為QQuickWebEngineView,用于在QML場(chǎng)景中嵌入Web內(nèi)容。

例如,創(chuàng)建并加載一個(gè)網(wǎng)頁的基本用法如下:

#include <QWebEngineView>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWebEngineView view;
    view.load(QUrl(QStringLiteral("http://www.example.com")));
    view.show();

    return app.exec();
}

以上代碼會(huì)創(chuàng)建一個(gè)QWebEngineView窗口,并加載example.com網(wǎng)站的內(nèi)容。

二、成員函數(shù)

1、QWebEngineView::QWebEngineView(QWidget *parent = Q_NULLPTR)

QWebEngineView::QWebEngineView(QWidget *parent = Q_NULLPTR) 是Qt WebEngine模塊中用于創(chuàng)建一個(gè)QWebEngineView對(duì)象的構(gòu)造函數(shù)。

參數(shù) parent 指向一個(gè)QWidget指針,它是QWebEngineView的父窗口或父控件。如果不傳入?yún)?shù)(使用默認(rèn)值Q_NULLPTR),則QWebEngineView將成為一個(gè)頂級(jí)窗口。如果指定了父控件,那么QWebEngineView將作為該父控件的子控件存在,并遵循父控件的生命周期和布局規(guī)則。

簡(jiǎn)而言之,這段代碼:

QWebEngineView *webView = new QWebEngineView(parentWidget);

將會(huì)創(chuàng)建一個(gè)新的QWebEngineView實(shí)例,并將其父控件設(shè)置為parentWidget。如果需要在窗口中顯示一個(gè)能夠?yàn)g覽網(wǎng)頁內(nèi)容的視圖,這就是創(chuàng)建該視圖的基本步驟。隨后可以調(diào)用webView->load(QUrl(url))來加載指定的網(wǎng)頁URL。

2、void QWebEngineView::back()

void QWebEngineView::back() 是Qt WebEngine模塊中的一個(gè)成員函數(shù),應(yīng)用于QWebEngineView類。該函數(shù)的作用是讓QWebEngineView中的網(wǎng)頁瀏覽器歷史回退一步,即顯示上一個(gè)訪問過的網(wǎng)頁。

在實(shí)際應(yīng)用中,如果你有一個(gè)QWebEngineView對(duì)象(比如命名為webView),并且用戶已經(jīng)在該瀏覽器控件中瀏覽了幾個(gè)網(wǎng)頁,調(diào)用 webView->back(); 就會(huì)讓瀏覽器返回到前一個(gè)頁面,就像在常規(guī)Web瀏覽器中點(diǎn)擊“后退”按鈕一樣。

以下是一個(gè)使用QWebEngineViewback()函數(shù)的簡(jiǎn)單代碼示例:

#include <QApplication>
#include <QWebEngineView>
#include <QUrl>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 創(chuàng)建一個(gè)QWebEngineView實(shí)例
    QWebEngineView* webView = new QWebEngineView();

    // 加載一個(gè)網(wǎng)頁
    webView->load(QUrl("https://www.example.com"));

    // 顯示QWebEngineView
    webView->show();

    // 假設(shè)用戶已經(jīng)瀏覽了一些頁面,現(xiàn)在模擬點(diǎn)擊“后退”按鈕
    if (webView->history()->canGoBack()) {
        webView->back(); // 回退到上一個(gè)頁面
    }

    return app.exec();
}

在這個(gè)例子中,首先創(chuàng)建了一個(gè)QWebEngineView實(shí)例,并加載了一個(gè)網(wǎng)頁。然后,檢查webView的歷史記錄中是否可以回退(即是否至少有兩個(gè)頁面),如果可以,則調(diào)用back()函數(shù)來實(shí)現(xiàn)頁面回退的功能。在實(shí)際應(yīng)用中,通常會(huì)將back()函數(shù)的調(diào)用綁定到一個(gè)按鈕的點(diǎn)擊事件上,以供用戶手動(dòng)觸發(fā)頁面回退行為。

3、void QWebEngineView::forward()

void QWebEngineView::forward() 是Qt WebEngine模塊中的一個(gè)成員函數(shù),用于QWebEngineView類。這個(gè)函數(shù)的作用是在網(wǎng)頁瀏覽歷史中向前推進(jìn)一步,即顯示下一個(gè)訪問過的網(wǎng)頁。

在實(shí)際應(yīng)用中,如果你有一個(gè)QWebEngineView對(duì)象(例如 webView),并且用戶已經(jīng)在該瀏覽器控件中瀏覽了若干網(wǎng)頁,并且當(dāng)前處于歷史記錄的前一個(gè)頁面,調(diào)用 webView->forward(); 就會(huì)讓瀏覽器跳轉(zhuǎn)到下一個(gè)頁面,就如同在常規(guī)Web瀏覽器中點(diǎn)擊“前進(jìn)”按鈕一樣。

下面是一個(gè)使用forward()函數(shù)的基本示例:

#include <QApplication>
#include <QWebEngineView>
#include <QUrl>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 創(chuàng)建一個(gè)QWebEngineView實(shí)例
    QWebEngineView* webView = new QWebEngineView();

    // 加載一個(gè)初始網(wǎng)頁
    webView->load(QUrl("https://www.example.com"));

    // 用戶瀏覽了其他頁面,現(xiàn)在假設(shè)已經(jīng)按后退按鈕回到了之前的頁面
    if (webView->history()->canGoForward()) { // 檢查是否可以前進(jìn)到下一個(gè)頁面
        webView->back(); // 先模擬后退一步
        webView->forward(); // 然后模擬前進(jìn)到下一個(gè)頁面
    }

    // 顯示QWebEngineView
    webView->show();

    return app.exec();
}

在這個(gè)示例中,我們首先加載了一個(gè)網(wǎng)頁,然后假設(shè)用戶進(jìn)行了后退操作,并檢查是否可以前進(jìn)。如果可以,我們就調(diào)用forward()函數(shù),讓瀏覽器顯示下一個(gè)頁面。在真實(shí)應(yīng)用中,通常會(huì)將forward()函數(shù)綁定到一個(gè)“前進(jìn)”按鈕的點(diǎn)擊事件上。

4、void QWebEngineView::iconChanged(const QIcon &icon)

void QWebEngineView::iconChanged(const QIcon &icon) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)加載的網(wǎng)頁圖標(biāo)(favicon)發(fā)生變化時(shí),這個(gè)信號(hào)會(huì)被發(fā)射。

這個(gè)信號(hào)并沒有一個(gè)對(duì)應(yīng)的成員函數(shù),而是作為一種通知機(jī)制,允許您連接到一個(gè)槽函數(shù)來響應(yīng)網(wǎng)頁圖標(biāo)的變化。例如,當(dāng)您希望在地址欄或者書簽中更新網(wǎng)頁對(duì)應(yīng)的圖標(biāo)時(shí),可以這樣做:

QObject::connect(webView, &QWebEngineView::iconChanged, [=](const QIcon &newIcon){
    // 更新地址欄或書簽欄中的圖標(biāo)
    addressBar->setIcon(newIcon);
    bookmarksManager->updateBookmarkIcon(currentUrl, newIcon);
});

// 或者在槽函數(shù)中處理
connect(webView, SIGNAL(iconChanged(QIcon)), this, SLOT(updatePageIcon(QIcon)));

//槽函數(shù)
void YourClass::updatePageIcon(const QIcon &icon) {
    // 在這里處理圖標(biāo)變化,例如更新UI中的圖標(biāo)
    myStatusIcon->setIcon(icon);
}

請(qǐng)注意,上面的代碼展示了Qt 5中的信號(hào)與槽連接方式,對(duì)于Qt 5.14及以后的版本,推薦使用lambda表達(dá)式或connect函數(shù)的第一個(gè)形式來連接信號(hào)和槽。在Qt 4風(fēng)格的信號(hào)槽語法中,使用SIGNALSLOT宏。

5、void QWebEngineView::iconUrlChanged(const QUrl &url)

void QWebEngineView::iconUrlChanged(const QUrl &url) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)網(wǎng)頁的圖標(biāo)URL(favicon URL)發(fā)生變化時(shí),該信號(hào)會(huì)被發(fā)射。這個(gè)信號(hào)攜帶了一個(gè)QUrl類型的參數(shù),該參數(shù)包含了新的圖標(biāo)資源的URL。

這個(gè)信號(hào)常用于監(jiān)控網(wǎng)頁favicon的更新,當(dāng)網(wǎng)頁的圖標(biāo)URL變化時(shí),您可以連接到這個(gè)信號(hào),并根據(jù)新的URL獲取和更新對(duì)應(yīng)的圖標(biāo)資源。

例如,通過信號(hào)槽機(jī)制,您可以捕獲這個(gè)信號(hào)并做出相應(yīng)動(dòng)作:

QObject::connect(webView, &QWebEngineView::iconUrlChanged, [&](const QUrl &newIconUrl){
    // 新的圖標(biāo)URL已改變,可以在此處根據(jù)新的URL下載并更新圖標(biāo)
    // 下面的代碼僅為示意,實(shí)際應(yīng)用中可能需要異步下載并處理圖標(biāo)數(shù)據(jù)
    QImage iconImage = QImageReader(newIconUrl).read();
    if (!iconImage.isNull()) {
        myStatusBar->setIcon(QIcon(iconImage));
    }
});

void QWebEngineView::iconChanged(const QIcon &icon) 和 void QWebEngineView::iconUrlChanged(const QUrl &url) 是Qt WebEngine模塊中QWebEngineView類的兩個(gè)不同信號(hào),它們的區(qū)別在于提供的信息和處理方式:

  • iconChanged(const QIcon &icon)

    • 這個(gè)信號(hào)是在網(wǎng)頁的圖標(biāo)(favicon)實(shí)際內(nèi)容發(fā)生變化時(shí)觸發(fā)的。
    • 當(dāng)網(wǎng)頁的favicon加載完成或更新時(shí),該信號(hào)會(huì)直接傳遞一個(gè)已經(jīng)解析并加載好的圖標(biāo)對(duì)象(QIcon)。
    • 開發(fā)者可以直接使用這個(gè)圖標(biāo)對(duì)象更新UI,無需關(guān)心具體的URL和加載過程。
  • iconUrlChanged(const QUrl &url)

    • 這個(gè)信號(hào)在網(wǎng)頁的favicon URL發(fā)生變化時(shí)觸發(fā)。
    • 該信號(hào)只提供新的圖標(biāo)資源的URL地址,而不提供已解析的圖標(biāo)數(shù)據(jù)。
    • 開發(fā)者需要根據(jù)這個(gè)URL自行加載圖片資源(例如通過QImageReader等工具),然后轉(zhuǎn)換成QIcon對(duì)象,最后更新UI。

總結(jié)來說,iconChanged 提供了 favicon 圖片的實(shí)體數(shù)據(jù),可以直接用于界面更新;而 iconUrlChanged 提供的是圖片資源的網(wǎng)址,開發(fā)者需要進(jìn)一步處理才能獲取到圖片數(shù)據(jù)。在實(shí)際應(yīng)用中,根據(jù)需求可以選擇監(jiān)聽其中一個(gè)或兩個(gè)信號(hào),前者更適合快速更新UI,后者則提供了更大的靈活性,但需要額外的處理步驟。

6、void QWebEngineView::loadFinished(bool ok)

void QWebEngineView::loadFinished(bool ok) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)網(wǎng)頁加載完畢時(shí),不論加載成功與否,該信號(hào)都會(huì)被觸發(fā)。

參數(shù) bool ok 表示加載操作是否成功。如果 ok 為 true,則表示網(wǎng)頁加載順利完成;如果為 false,則表示加載過程中遇到了錯(cuò)誤或中斷。

開發(fā)者通常會(huì)連接到這個(gè)信號(hào)來執(zhí)行網(wǎng)頁加載完成后的后續(xù)操作,例如:

QObject::connect(webView, &QWebEngineView::loadFinished, [=](bool success){
    if (success) {
        qDebug() << "Web page loaded successfully.";
        // 執(zhí)行加載成功后的操作,例如隱藏進(jìn)度條、啟用UI元素等
    } else {
        qDebug() << "Failed to load web page!";
        // 執(zhí)行加載失敗后的操作,例如顯示錯(cuò)誤信息、嘗試重新加載等
    }
});

這個(gè)信號(hào)非常重要,因?yàn)樗梢詭椭_發(fā)者跟蹤網(wǎng)頁加載的狀態(tài),并根據(jù)加載結(jié)果執(zhí)行相應(yīng)的程序邏輯。

7、void QWebEngineView::loadProgress(int progress)

void QWebEngineView::loadProgress(int progress) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)網(wǎng)頁加載的過程中,這個(gè)信號(hào)會(huì)被周期性地發(fā)射,告知當(dāng)前加載的進(jìn)度百分比。

參數(shù) int progress 是一個(gè)介于0到100之間的整數(shù),代表網(wǎng)頁加載的進(jìn)度。0表示加載尚未開始或剛剛開始,100表示加載已完成。

開發(fā)者可以連接到這個(gè)信號(hào)來實(shí)時(shí)顯示網(wǎng)頁加載的進(jìn)度,例如在進(jìn)度條上反映出來

QObject::connect(webView, &QWebEngineView::loadProgress, [=](int currentProgress){
    progressBar->setValue(currentProgress);
    // 這里的progressBar是一個(gè)QProgressBar對(duì)象,用于顯示加載進(jìn)度
});

這樣一來,每當(dāng)網(wǎng)頁加載的進(jìn)度發(fā)生變化時(shí),進(jìn)度條就會(huì)相應(yīng)地更新其值,讓用戶直觀地了解到加載的過程。

8、void QWebEngineView::loadStarted()

void QWebEngineView::loadStarted() 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)QWebEngineView開始加載一個(gè)網(wǎng)頁時(shí),該信號(hào)會(huì)被立即觸發(fā)。

開發(fā)者通常會(huì)連接到這個(gè)信號(hào)來執(zhí)行網(wǎng)頁加載開始時(shí)的一些操作,例如顯示加載動(dòng)畫、禁用某些交互功能等,以表明網(wǎng)頁正在加載中。以下是一個(gè)簡(jiǎn)單的示例:

QObject::connect(webView, &QWebEngineView::loadStarted, [=](){
    // 顯示加載進(jìn)度條或加載動(dòng)畫
    loadingIndicator->start();
    // 禁止用戶與界面的某些交互
    someInteractiveWidget->setEnabled(false);
    qDebug() << "Web page loading started...";
});

在這段代碼中,當(dāng)網(wǎng)頁加載開始時(shí),loadingIndicator(加載指示器)會(huì)被啟動(dòng),同時(shí)某個(gè)交互式小部件(someInteractiveWidget)會(huì)被禁用,以防止用戶在加載期間進(jìn)行無效的操作。同時(shí),控制臺(tái)會(huì)打印一條消息表示加載已經(jīng)開始。

9、void QWebEngineView::reload()

void QWebEngineView::reload() 是Qt WebEngine模塊中的 QWebEngineView 類的一個(gè)成員函數(shù)。調(diào)用此函數(shù)會(huì)導(dǎo)致當(dāng)前在 QWebEngineView 視圖中加載的網(wǎng)頁重新加載。這意味著它會(huì)終止當(dāng)前頁面的加載(如果還在加載中),并從服務(wù)器重新獲取該頁面的最新版本。

在實(shí)際應(yīng)用中,可能在需要更新網(wǎng)頁內(nèi)容或者處理網(wǎng)頁刷新邏輯時(shí)使用此方法。例如,當(dāng)用戶點(diǎn)擊刷新按鈕或者程序需要確保顯示的是最新網(wǎng)頁數(shù)據(jù)時(shí),可以調(diào)用 reload() 函數(shù)來實(shí)現(xiàn)頁面刷新。

以下是調(diào)用該函數(shù)的基本示例:

QWebEngineView *webView = new QWebEngineView(parent);
// ... 進(jìn)行視圖初始化及加載URL等操作 ...
// 當(dāng)需要刷新頁面時(shí)
webView->reload();

10、void QWebEngineView::renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode)

void QWebEngineView::renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)網(wǎng)頁渲染進(jìn)程突然終止時(shí),這個(gè)信號(hào)會(huì)被觸發(fā)。

參數(shù)說明:

  • QWebEnginePage::RenderProcessTerminationStatus terminationStatus:表示渲染進(jìn)程結(jié)束的狀態(tài),它可以是諸如正常退出、異常退出、被瀏覽器強(qiáng)制結(jié)束等各種情況。
  • int exitCode:表示渲染進(jìn)程的退出代碼,對(duì)于異常退出等情況,這個(gè)代碼有助于了解進(jìn)程為何終止的具體原因。

當(dāng)收到這個(gè)信號(hào)時(shí),開發(fā)者通常需要處理這種情況,比如重新加載網(wǎng)頁、顯示錯(cuò)誤提示或者記錄日志等。例如:

QObject::connect(webView, &QWebEngineView::renderProcessTerminated, [&](QWebEnginePage::RenderProcessTerminationStatus status, int code){
    switch (status) {
    case QWebEnginePage::NormalTerminationStatus:
        qDebug() << "Render process terminated normally with exit code:" << code;
        // 可能處理正常結(jié)束的邏輯
        break;
    case QWebEnginePage::AbnormalTerminationStatus:
        qDebug() << "Render process terminated abnormally with exit code:" << code;
        // 可能需要重新加載頁面或其他恢復(fù)措施
        webView->reload();
        break;
    case QWebEnginePage::CrashedStatus:
        qDebug() << "Render process crashed with exit code:" << code;
        // 可能需要顯示錯(cuò)誤信息或采取其他錯(cuò)誤處理策略
        QMessageBox::critical(nullptr, "Error", "The render process has crashed.");
        break;
    default:
        // 其他未知情況的處理
        break;
    }
});

11、void QWebEngineView::selectionChanged()

void QWebEngineView::selectionChanged() 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)用戶在網(wǎng)頁中更改文本選擇(例如高亮選中文本)時(shí),這個(gè)信號(hào)會(huì)被觸發(fā)。

當(dāng)您連接到此信號(hào)時(shí),可以編寫相應(yīng)的槽函數(shù)來接收通知,并據(jù)此執(zhí)行相應(yīng)的操作,比如獲取當(dāng)前選中的文本、復(fù)制到剪貼板,或者做其他的文本處理工作。以下是一個(gè)基本的示例:

QObject::connect(webView, &QWebEngineView::selectionChanged, [=]() {
    QString selectedText = webView->selectedText();
    qDebug() << "Selected text changed to: " << selectedText;
    // 在這里可以處理選中文本的變化,比如顯示到另一個(gè)控件,或者保存到剪貼板等操作
});

當(dāng)網(wǎng)頁中的文本選擇發(fā)生變化時(shí),上述代碼會(huì)捕獲到這個(gè)事件,并打印出當(dāng)前選中的文本。

12、void QWebEngineView::stop()

void QWebEngineView::stop() 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。當(dāng)調(diào)用這個(gè)函數(shù)時(shí),它會(huì)停止當(dāng)前正在加載或渲染的網(wǎng)頁。也就是說,如果QWebEngineView正在加載一個(gè)網(wǎng)頁,或者執(zhí)行JavaScript腳本、播放媒體等操作,調(diào)用此函數(shù)將會(huì)中止這些活動(dòng)。

在實(shí)際應(yīng)用中,這個(gè)函數(shù)常常被用于用戶取消加載或者遇到網(wǎng)絡(luò)問題需要提前結(jié)束加載任務(wù)的情況。例如,當(dāng)用戶按下“停止加載”按鈕時(shí):

QPushButton *stopButton = new QPushButton("Stop Loading", this);
QObject::connect(stopButton, &QPushButton::clicked, webView, &QWebEngineView::stop);

13、void QWebEngineView::titleChanged(const QString &title)

void QWebEngineView::titleChanged(const QString &title) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)網(wǎng)頁標(biāo)題發(fā)生變化時(shí),該信號(hào)會(huì)被觸發(fā),參數(shù) title 包含的是新的網(wǎng)頁標(biāo)題字符串。

在Web應(yīng)用開發(fā)中,開發(fā)者通常會(huì)連接到這個(gè)信號(hào)來更新應(yīng)用程序界面中的標(biāo)題欄或標(biāo)簽,以便反映出當(dāng)前網(wǎng)頁的實(shí)際標(biāo)題。例如:

QObject::connect(webView, &QWebEngineView::titleChanged, [=](const QString &newTitle){
    // 更新窗口標(biāo)題欄或自定義的標(biāo)題顯示控件
    windowTitleBar->setText(newTitle);
    // 或者
    this->setWindowTitle(newTitle);
});

在這個(gè)例子中,當(dāng)網(wǎng)頁標(biāo)題發(fā)生變化時(shí),窗口標(biāo)題欄(windowTitleBar)或整個(gè)窗口的標(biāo)題將會(huì)被更新為新的網(wǎng)頁標(biāo)題。

14、void QWebEngineView::urlChanged(const QUrl &url)

void QWebEngineView::urlChanged(const QUrl &url) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)信號(hào)。當(dāng)QWebEngineView中的網(wǎng)頁URL發(fā)生改變時(shí)(例如用戶點(diǎn)擊鏈接跳轉(zhuǎn)到新的網(wǎng)頁,或者通過JavaScript更改location.href),該信號(hào)會(huì)被觸發(fā)。

信號(hào)參數(shù) const QUrl &url 指向的是網(wǎng)頁當(dāng)前加載的新URL地址。開發(fā)者通常會(huì)連接到這個(gè)信號(hào)來更新相關(guān)的UI元素,例如地址欄,或者追蹤用戶的導(dǎo)航歷史,甚至限制用戶只能訪問預(yù)先批準(zhǔn)的一系列URL等等。

下面是一個(gè)簡(jiǎn)單的示例,展示如何在URL變化時(shí)更新地址欄:

QObject::connect(webView, &QWebEngineView::urlChanged, [=](const QUrl &newUrl){
    addressLineEdit->setText(newUrl.toString()); // 假設(shè)addressLineEdit是一個(gè)顯示當(dāng)前URL的lineEdit控件
});

當(dāng)QWebEngineView中的網(wǎng)頁URL發(fā)生變化時(shí),上述代碼將更新addressLineEdit控件的文本內(nèi)容為新的URL。

15、QWebEngineView::~QWebEngineView()

QWebEngineView::~QWebEngineView() 是Qt WebEngine模塊中QWebEngineView類的析構(gòu)函數(shù)。當(dāng)一個(gè)QWebEngineView對(duì)象的生命期結(jié)束時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)析構(gòu)函數(shù)來清理和釋放該對(duì)象占用的資源。

析構(gòu)函數(shù)的主要作用是:

  • 清理與QWebEngineView相關(guān)的所有資源,例如關(guān)閉與之關(guān)聯(lián)的網(wǎng)絡(luò)請(qǐng)求、釋放內(nèi)存、斷開連接的信號(hào)槽關(guān)系等。
  • 繼承自QObject的析構(gòu)函數(shù)還會(huì)自動(dòng)注銷對(duì)象,避免產(chǎn)生內(nèi)存泄漏或懸掛指針。

通常情況下,程序員無需顯式調(diào)用析構(gòu)函數(shù),而是由C++的自動(dòng)內(nèi)存管理系統(tǒng)在對(duì)象超出作用域或被智能指針刪除時(shí)自動(dòng)調(diào)用。但在一些需要手動(dòng)管理內(nèi)存的情況下,如在堆上創(chuàng)建QWebEngineView對(duì)象時(shí),應(yīng)在不再需要該對(duì)象時(shí)調(diào)用delete運(yùn)算符來釋放對(duì)象,進(jìn)而觸發(fā)析構(gòu)函數(shù)執(zhí)行清理工作。

16、void QWebEngineView::closeEvent(QCloseEvent *event)

void QWebEngineView::closeEvent(QCloseEvent *event) 是Qt框架中一個(gè)覆蓋基類QWidget的虛函數(shù)。當(dāng)QWebEngineView窗口接收到關(guān)閉事件時(shí)(例如用戶點(diǎn)擊窗口關(guān)閉按鈕或程序調(diào)用了close()函數(shù)),該函數(shù)會(huì)被調(diào)用。

在QWebEngineView中重寫這個(gè)函數(shù)可以讓你有機(jī)會(huì)在窗口關(guān)閉前執(zhí)行特定的操作,例如保存當(dāng)前狀態(tài)、清理資源、確認(rèn)用戶是否真的想要關(guān)閉等。下面是一個(gè)簡(jiǎn)單的示例:

void MyWebEngineView::closeEvent(QCloseEvent *event)
{
    // 如果需要確認(rèn)用戶是否真的要關(guān)閉窗口,可以彈出對(duì)話框詢問
    if (maybeSaveOrCancel()) {
        // 用戶同意關(guān)閉,接受關(guān)閉事件
        event->accept();
    } else {
        // 用戶不同意關(guān)閉,拒絕關(guān)閉事件
        event->ignore();
    }

    // 在關(guān)閉窗口之前還可以執(zhí)行其他必要的清理操作
    // ...

    // 若未重寫此函數(shù),窗口將在接收到關(guān)閉事件時(shí)直接關(guān)閉
    // 通過覆蓋此函數(shù),我們可以控制關(guān)閉流程
}

在這個(gè)示例中,MyWebEngineView是一個(gè)繼承自QWebEngineView的自定義類,它重寫了closeEvent函數(shù)。在函數(shù)內(nèi)部,可以根據(jù)需要處理關(guān)閉事件的行為。

17、void QWebEngineView::contextMenuEvent(QContextMenuEvent *event)

void QWebEngineView::contextMenuEvent(QContextMenuEvent *event) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)重載事件處理函數(shù)。當(dāng)用戶在QWebEngineView控件內(nèi)右擊鼠標(biāo)時(shí),會(huì)觸發(fā)上下文菜單事件(context menu event),此時(shí)這個(gè)函數(shù)會(huì)被調(diào)用。

在該函數(shù)內(nèi)部,開發(fā)者可以自定義上下文菜單的行為,例如顯示自定義的菜單項(xiàng),或者阻止默認(rèn)的上下文菜單出現(xiàn)。下面是一個(gè)簡(jiǎn)單的示例:

void MyWebEngineView::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu contextMenu(this);

    // 添加自定義菜單項(xiàng)
    QAction *copyAction = contextMenu.addAction(tr("&Copy"));
    connect(copyAction, &QAction::triggered, this, &MyWebEngineView::copySelection);

    // 顯示自定義的上下文菜單
    contextMenu.exec(event->globalPos());

    // 阻止默認(rèn)的上下文菜單顯示
    event->accept();
}

// 定義一個(gè)槽函數(shù)來處理復(fù)制操作
void MyWebEngineView::copySelection()
{
    // 獲取并復(fù)制當(dāng)前選中的文本
    QString selection = this->selectedText();
    qApp->clipboard()->setText(selection);
}

在上述代碼中,當(dāng)用戶在QWebEngineView中右擊時(shí),會(huì)彈出自定義的上下文菜單,其中包括一個(gè)“復(fù)制”選項(xiàng)。如果用戶點(diǎn)擊了“復(fù)制”,則會(huì)調(diào)用copySelection槽函數(shù),將當(dāng)前選中的文本復(fù)制到剪貼板中。同時(shí),調(diào)用event->accept()來阻止默認(rèn)的上下文菜單出現(xiàn)。

18、QWebEngineView *QWebEngineView::createWindow(QWebEnginePage::WebWindowType type)

QWebEngineView *QWebEngineView::createWindow(QWebEnginePage::WebWindowType type) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)虛擬成員函數(shù)。當(dāng)網(wǎng)頁內(nèi)部觸發(fā)了一個(gè)需要打開新窗口的事件(例如點(diǎn)擊了一個(gè)<a target="_blank">標(biāo)簽或運(yùn)行了打開新窗口的JavaScript代碼)時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。

該函數(shù)接收一個(gè)枚舉參數(shù) QWebEnginePage::WebWindowType type,該參數(shù)標(biāo)識(shí)了新窗口的類型,例如新標(biāo)簽頁、彈出窗口等。

開發(fā)者需要重寫這個(gè)函數(shù)來創(chuàng)建并返回一個(gè)新的QWebEngineView實(shí)例,以便處理新窗口的打開和顯示。如果不重寫此函數(shù),默認(rèn)情況下可能不會(huì)創(chuàng)建新窗口或者顯示不當(dāng)。

示例代碼:

class CustomWebEngineView : public QWebEngineView
{
    Q_OBJECT
public:
    CustomWebEngineView(QWidget *parent = nullptr) : QWebEngineView(parent) {}

protected:
    virtual QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) override
    {
        // 創(chuàng)建并返回一個(gè)新的QWebEngineView實(shí)例
        auto newView = new QWebEngineView(parentWidget());
        // 可以根據(jù)type調(diào)整新窗口的外觀或行為
        // ...
        return newView;
    }
};

在上述示例中,每當(dāng)網(wǎng)頁內(nèi)部觸發(fā)打開新窗口事件時(shí),createWindow函數(shù)會(huì)被調(diào)用,并返回一個(gè)新的QWebEngineView實(shí)例。開發(fā)者可以根據(jù)窗口類型來自定義新窗口的行為和樣式,比如將其嵌入到現(xiàn)有窗口中,或者作為一個(gè)新的窗口顯示。

19、void QWebEngineView::dragEnterEvent(QDragEnterEvent *e)

void QWebEngineView::dragEnterEvent(QDragEnterEvent *e) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)重載事件處理函數(shù)。當(dāng)拖放操作中的鼠標(biāo)光標(biāo)進(jìn)入QWebEngineView控件區(qū)域時(shí),會(huì)觸發(fā)dragEnterEvent事件。

這個(gè)函數(shù)允許你自定義當(dāng)拖動(dòng)數(shù)據(jù)進(jìn)入QWebEngineView時(shí)的行為,比如決定是否接受這次拖放操作。在函數(shù)中,可以檢查拖放的數(shù)據(jù)類型,并設(shè)置事件的acceptProposedAction()屬性來決定是否允許數(shù)據(jù)在此控件上放下。

void MyWebEngineView::dragEnterEvent(QDragEnterEvent *e)
{
    if (e->mimeData()->hasFormat("text/plain")) // 檢查拖動(dòng)的數(shù)據(jù)是否是純文本格式
    {
        e->acceptProposedAction(); // 接受這次拖放操作,允許數(shù)據(jù)在此控件上放下
    }
    else
    {
        e->ignore(); // 不接受此次拖放操作
    }
}

在這個(gè)示例中,如果拖拽的數(shù)據(jù)類型是純文本,那么我們?cè)试S拖放到QWebEngineView上;否則,忽略這次拖放事件。實(shí)際應(yīng)用中,你可能需要根據(jù)你的應(yīng)用需求來處理不同類型的拖放數(shù)據(jù)。

20、void QWebEngineView::dragLeaveEvent(QDragLeaveEvent *e)

void QWebEngineView::dragLeaveEvent(QDragLeaveEvent *e) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)重載事件處理函數(shù)。當(dāng)拖放操作中的鼠標(biāo)光標(biāo)離開QWebEngineView控件區(qū)域時(shí),會(huì)觸發(fā)dragLeaveEvent事件。

這個(gè)函數(shù)主要用于處理拖放操作期間鼠標(biāo)離開視圖區(qū)域的情況,通常在自定義拖放功能時(shí),可以在這個(gè)函數(shù)中撤銷之前在dragEnterEventdragMoveEvent中設(shè)置的一些視覺效果或狀態(tài)。

示例代碼:

void MyWebEngineView::dragLeaveEvent(QDragLeaveEvent *e)
{
    // 在這里可以清除之前在dragEnterEvent或dragMoveEvent中設(shè)置的任何臨時(shí)狀態(tài)或視覺效果
    // 例如,如果在鼠標(biāo)進(jìn)入時(shí)改變了背景色,這時(shí)可以恢復(fù)原來的背景色
    setBackgroundColor(originalBackgroundColor);

    // 默認(rèn)情況下,接受該事件
    e->accept();
}

在上述代碼中,當(dāng)拖拽操作離開視圖時(shí),視圖會(huì)恢復(fù)到原始背景顏色。實(shí)際上,具體的處理邏輯取決于你的應(yīng)用需求和之前對(duì)拖放事件所做的定制。

21、void QWebEngineView::dragMoveEvent(QDragMoveEvent *e)

void QWebEngineView::dragMoveEvent(QDragMoveEvent *e) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)重載事件處理函數(shù)。當(dāng)拖放操作中的鼠標(biāo)在QWebEngineView控件區(qū)域內(nèi)移動(dòng)時(shí),會(huì)觸發(fā)dragMoveEvent事件。

這個(gè)函數(shù)主要用來處理拖拽過程中鼠標(biāo)移動(dòng)時(shí)的交互行為,比如可以檢測(cè)鼠標(biāo)當(dāng)前位置,決定是否允許拖放目標(biāo)區(qū)域,并更新相關(guān)反饋信息,例如改變鼠標(biāo)的形狀、更新提示信息等。

示例代碼:

void MyWebEngineView::dragMoveEvent(QDragMoveEvent *e)
{
    // 檢查當(dāng)前拖放的位置是否滿足條件,例如在可接受的范圍內(nèi)
    if (isDropAllowed(e->pos()))
    {
        // 如果允許放下數(shù)據(jù),則接受拖動(dòng)事件
        e->acceptProposedAction();
        // 可以在這里更新界面狀態(tài),如改變控件的背景顏色,顯示即將放置的提示等
    }
    else
    {
        // 否則,拒絕此次拖動(dòng)事件
        e->ignore();
    }
}

// 示例輔助函數(shù),檢查拖放位置是否滿足條件
bool MyWebEngineView::isDropAllowed(const QPoint &pos)
{
    // 這里可以根據(jù)實(shí)際需求判斷pos坐標(biāo)是否在有效范圍內(nèi)
    // 以下代碼僅為示例,實(shí)際邏輯需根據(jù)具體應(yīng)用場(chǎng)景編寫
    QRect rect = this->rect();
    return rect.contains(pos);
}

在上述代碼中,當(dāng)拖拽操作在QWebEngineView內(nèi)移動(dòng)時(shí),會(huì)檢查當(dāng)前位置是否滿足放置數(shù)據(jù)的條件,如果滿足則接受拖動(dòng)事件,反之則忽略。同時(shí),可以根據(jù)實(shí)際情況在這個(gè)函數(shù)內(nèi)實(shí)現(xiàn)更多復(fù)雜的拖放邏輯。

22、void QWebEngineView::dropEvent(QDropEvent *e)

void QWebEngineView::dropEvent(QDropEvent *e) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)重載事件處理函數(shù)。當(dāng)用戶在QWebEngineView控件上完成拖放操作(即釋放鼠標(biāo)按鈕)時(shí),會(huì)觸發(fā)dropEvent事件。

在該函數(shù)中,你可以處理拖放的實(shí)際數(shù)據(jù)交換,獲取拖放的數(shù)據(jù)類型,并將數(shù)據(jù)應(yīng)用到QWebEngineView中,例如在網(wǎng)頁中插入文本、圖片或其他類型的數(shù)據(jù)。

下面是一個(gè)簡(jiǎn)單的示例:

void MyWebEngineView::dropEvent(QDropEvent *e)
{
    if (e->mimeData()->hasUrls())
    {
        foreach (const QUrl &url, e->mimeData()->urls())
        {
            // 處理URL數(shù)據(jù),例如加載拖放的鏈接
            load(url);
        }
        e->acceptProposedAction();
    }
    else if (e->mimeData()->hasText())
    {
        // 處理文本數(shù)據(jù),例如將拖放的文本插入到網(wǎng)頁中
        QString text = e->mimeData()->text();
        // 這里假設(shè)有一個(gè)insertTextToWebPage(text)的函數(shù)可以將文本插入到網(wǎng)頁中
        insertTextToWebPage(text);
        e->acceptProposedAction();
    }
    else
    {
        e->ignore();
    }
}

在這個(gè)示例中,當(dāng)用戶在QWebEngineView上完成拖放操作時(shí),程序會(huì)檢查拖放的數(shù)據(jù)類型。如果是URL鏈接,則加載該鏈接;如果是文本,則將其插入到網(wǎng)頁中。如果數(shù)據(jù)類型不支持,則忽略這次拖放事件。

23、bool QWebEngineView::event(QEvent *ev)

bool QWebEngineView::event(QEvent *ev) 是Qt框架中QWebEngineView類的一個(gè)重載函數(shù)。在Qt中,所有繼承自QObject的類都可以通過重寫event()函數(shù)來處理各種事件。這個(gè)函數(shù)接收一個(gè)QEvent指針作為參數(shù),通過檢查事件類型并進(jìn)行適當(dāng)處理。

在QWebEngineView中,event()函數(shù)可以處理所有發(fā)送給QWebEngineView對(duì)象的事件,包括但不限于鍵盤輸入、鼠標(biāo)事件、窗口事件等。如果您想自定義QWebEngineView的行為,比如處理一些特殊的事件或擴(kuò)展默認(rèn)行為,可以重寫這個(gè)函數(shù)。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何在event()函數(shù)中處理特定類型的事件:

bool MyWebEngineView::event(QEvent *ev)
{
    if (ev->type() == QEvent::KeyPress) {
        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(ev);
        // 處理按鍵事件,例如禁用某個(gè)鍵的功能
        if (keyEvent->key() == Qt::Key_F5) {
            // 禁止F5鍵刷新頁面
            ev->ignore();
            return true;
        }
    }

    // 對(duì)于未處理的事件,調(diào)用父類的event()函數(shù)
    return QWebEngineView::event(ev);
}

在上述代碼中,當(dāng)QWebEngineView接收到按鍵事件時(shí),會(huì)檢查是否為F5鍵,如果是,則忽略該事件(不執(zhí)行默認(rèn)的刷新頁面操作),并返回true表示事件已被處理。對(duì)于其他類型的事件,如果沒有特殊處理,就交由QWebEngineView的基類來處理。

24、void QWebEngineView::findText(const QString &subString, QWebEnginePage::FindFlags options = QWebEnginePage::FindFlags(), const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>())

void QWebEngineView::findText(const QString &subString, QWebEnginePage::FindFlags options = QWebEnginePage::FindFlags(), const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>()) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù),用于在網(wǎng)頁內(nèi)容中查找指定的字符串。

函數(shù)參數(shù)解釋:

  • const QString &subString:要在網(wǎng)頁中搜索的字符串。

  • QWebEnginePage::FindFlags options:查找選項(xiàng),可以是以下幾種標(biāo)志的組合(使用|符號(hào)連接):

    • QWebEnginePage::CaseSensitively:區(qū)分大小寫查找。
    • QWebEnginePage::HighlightAllOccurrences:高亮所有找到的結(jié)果。
    • QWebEnginePage::WordStart:從單詞開始處查找。
    • 其他可能的查找選項(xiàng)。
  • const QWebEngineCallback<bool> &resultCallback:查找結(jié)果回調(diào)函數(shù),當(dāng)查找完成時(shí),會(huì)調(diào)用這個(gè)回調(diào)函數(shù),并傳入一個(gè)布爾值表示是否找到了匹配項(xiàng)。

myWebEngineView.findText("搜索關(guān)鍵詞", QWebEnginePage::FindFlags(QWebEnginePage::CaseSensitively | QWebEnginePage::HighlightAllOccurrences),
                       [](bool found) {
                           if (found) {
                               qDebug() << "找到了匹配項(xiàng)";
                           } else {
                               qDebug() << "未找到匹配項(xiàng)";
                           }
                       });

在上述代碼中,我們嘗試在網(wǎng)頁中查找"搜索關(guān)鍵詞",同時(shí)設(shè)置查找選項(xiàng)為區(qū)分大小寫并高亮所有匹配項(xiàng)。當(dāng)查找操作完成時(shí),會(huì)調(diào)用提供的lambda表達(dá)式作為回調(diào)函數(shù),輸出查找結(jié)果。

25、void QWebEngineView::hideEvent(QHideEvent *event)

void QWebEngineView::hideEvent(QHideEvent *event) 是Qt框架中QWebEngineView類的一個(gè)重載事件處理函數(shù)。當(dāng)QWebEngineView控件變?yōu)椴豢梢姡ɡ?,窗口被最小化或隱藏)時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。

在實(shí)際應(yīng)用中,重寫此函數(shù)可以讓你在控件隱藏時(shí)執(zhí)行特定的操作,例如暫停視頻播放、釋放資源以節(jié)省內(nèi)存、記錄用戶行為等。示例代碼如下:

void MyWebEngineView::hideEvent(QHideEvent *event)
{
    // 停止視頻播放或其他資源消耗較大的操作
    if (videoPlayer.isPlaying())
        videoPlayer.stop();

    // 記錄用戶隱藏窗口的時(shí)間點(diǎn)或其他相關(guān)信息
    logUserAction("Web view hidden");

    // 調(diào)用父類的hideEvent方法以確保Qt默認(rèn)的隱藏事件處理也能被執(zhí)行
    QWebEngineView::hideEvent(event);
}

在這個(gè)示例中,當(dāng)QWebEngineView被隱藏時(shí),首先會(huì)檢查并停止視頻播放(這里假設(shè)videoPlayer是一個(gè)視頻播放器對(duì)象),然后記錄用戶的隱藏操作。最后調(diào)用父類QWebEngineView的hideEvent方法來執(zhí)行默認(rèn)的事件處理邏輯。

26、QWebEngineHistory *QWebEngineView::history() const

QWebEngineHistory *QWebEngineView::history() const 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。這個(gè)函數(shù)返回一個(gè)指向QWebEngineHistory對(duì)象的指針,該對(duì)象提供了對(duì)當(dāng)前QWebEngineView瀏覽歷史的訪問。

QWebEngineHistory類提供了很多方法來操作瀏覽歷史,例如:

  • int count():返回歷史記錄中的項(xiàng)目總數(shù)。
  • QUrl urlAt(int index):返回指定索引處的歷史項(xiàng)目URL。
  • int currentIndex():返回當(dāng)前激活頁面在歷史記錄中的索引。
  • void back():加載歷史記錄中的前一個(gè)頁面。
  • void forward():加載歷史記錄中的下一個(gè)頁面。
  • void clear():清除瀏覽歷史。

通過調(diào)用 QWebEngineView::history() 函數(shù),開發(fā)者可以獲取到QWebEngineView的瀏覽歷史記錄,并根據(jù)需要進(jìn)行操作,例如實(shí)現(xiàn)前進(jìn)、后退功能,或者遍歷歷史記錄進(jìn)行其他操作。

27、void QWebEngineView::load(const QUrl &url)

void QWebEngineView::load(const QUrl &url) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。這個(gè)函數(shù)用于在QWebEngineView控件中加載指定的URL地址,也就是在該視圖中打開并顯示指定網(wǎng)頁的內(nèi)容。

使用示例:

#include <QApplication>
#include <QWebEngineView>
#include <QUrl>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWebEngineView webView;
    webView.show();

    // 加載一個(gè)URL
    QUrl url("https://www.example.com");
    webView.load(url);

    return app.exec();
}

在這個(gè)示例中,我們創(chuàng)建了一個(gè)QWebEngineView對(duì)象,并使其可見。接著,我們定義了一個(gè)QUrl對(duì)象,指向"https://www.example.com",然后調(diào)用`webView.load(url)`來加載并顯示該網(wǎng)頁。當(dāng)調(diào)用這個(gè)函數(shù)后,QWebEngineView會(huì)開始加載指定的網(wǎng)頁,并在加載完成后顯示其內(nèi)容。

28、void QWebEngineView::load(const QWebEngineHttpRequest &request)

void QWebEngineView::load(const QWebEngineHttpRequest &request) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。不同于僅僅通過URL加載網(wǎng)頁,這個(gè)函數(shù)允許你通過一個(gè)詳細(xì)的HTTP請(qǐng)求對(duì)象來加載網(wǎng)頁內(nèi)容。

使用此函數(shù),你可以更詳細(xì)地控制發(fā)送給服務(wù)器的請(qǐng)求,例如設(shè)置HTTP方法(GET、POST等)、添加HTTP頭、傳輸數(shù)據(jù)體等。

示例代碼:

QWebEngineHttpRequest request;
request.setUrl(QUrl("https://example.com/api/data"));
request.setMethod(QWebEngineHttpRequest::Post); // 設(shè)置HTTP方法為POST
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); // 設(shè)置Content-Type頭

QJsonObject json;
json.insert("key", "value"); // 假設(shè)我們要發(fā)送JSON數(shù)據(jù)
QJsonDocument doc(json);
request.setBody(doc.toJson(QJsonDocument::Compact)); // 設(shè)置請(qǐng)求體為JSON數(shù)據(jù)

webView.load(request); // 使用自定義的HTTP請(qǐng)求加載數(shù)據(jù)

在這個(gè)示例中,我們創(chuàng)建了一個(gè)QWebEngineHttpRequest對(duì)象,并設(shè)置了URL、HTTP方法、Content-Type頭以及請(qǐng)求體。然后我們將這個(gè)自定義的HTTP請(qǐng)求對(duì)象傳遞給webView.load(request)函數(shù),以發(fā)起一個(gè)帶有特定參數(shù)的HTTP POST請(qǐng)求。這對(duì)于需要與服務(wù)器進(jìn)行復(fù)雜交互的Web應(yīng)用尤其有用。

29、QWebEnginePage *QWebEngineView::page() const

QWebEnginePage *QWebEngineView::page() const 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。這個(gè)函數(shù)返回與QWebEngineView關(guān)聯(lián)的QWebEnginePage對(duì)象的指針。

QWebEnginePage類提供了更加詳細(xì)的網(wǎng)頁操作接口,比如獲取網(wǎng)頁內(nèi)容、執(zhí)行JavaScript、處理網(wǎng)頁加載事件、管理網(wǎng)頁cookies、打印網(wǎng)頁等。當(dāng)你需要直接操作或獲取與QWebEngineView視圖中的網(wǎng)頁相關(guān)的詳細(xì)信息時(shí),可以使用這個(gè)函數(shù)來獲取QWebEnginePage對(duì)象。

示例:

QWebEngineView *webView = new QWebEngineView(parent);
// 加載網(wǎng)頁...
QWebEnginePage *webPage = webView->page();

// 現(xiàn)在可以通過webPage對(duì)象進(jìn)行更詳細(xì)的網(wǎng)頁操作
webPage->runJavaScript("console.log('Hello from JavaScript');");

在上述示例中,我們首先創(chuàng)建了一個(gè)QWebEngineView對(duì)象并加載網(wǎng)頁,然后通過調(diào)用page()函數(shù)獲取了與之關(guān)聯(lián)的QWebEnginePage對(duì)象,并執(zhí)行了一個(gè)JavaScript命令。

30、void QWebEngineView::load(const QWebEngineHttpRequest &request)

void QWebEngineView::load(const QWebEngineHttpRequest &request) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)函數(shù),用于根據(jù)提供的QWebEngineHttpRequest對(duì)象加載網(wǎng)頁內(nèi)容。這個(gè)函數(shù)允許開發(fā)者自定義HTTP請(qǐng)求,包括設(shè)置請(qǐng)求方法(如GET、POST等)、請(qǐng)求頭和請(qǐng)求體等,從而實(shí)現(xiàn)更精細(xì)的網(wǎng)頁加載控制。

例如,如果你想通過POST方法發(fā)送JSON數(shù)據(jù)到服務(wù)器并加載響應(yīng)的網(wǎng)頁內(nèi)容,可以這樣使用:

QWebEngineHttpRequest request;
request.setUrl(QUrl("http://example.com/api/login")); // 設(shè)置請(qǐng)求的URL
request.setMethod(QWebEngineHttpRequest::Post); // 設(shè)置請(qǐng)求方法為POST

QJsonObject json;
json["username"] = "testuser";
json["password"] = "testpass";

QJsonDocument doc(json);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); // 設(shè)置Content-Type頭
request.setBody(doc.toJson()); // 設(shè)置請(qǐng)求體為JSON數(shù)據(jù)

QWebEngineView *webView = new QWebEngineView(parentWidget);
webView->load(request); // 使用自定義的HTTP請(qǐng)求加載網(wǎng)頁

在上述代碼中,我們創(chuàng)建了一個(gè)QWebEngineHttpRequest對(duì)象,并設(shè)置了URL、HTTP方法、Content-Type頭以及請(qǐng)求體,然后將這個(gè)請(qǐng)求對(duì)象傳遞給QWebEngineView的load函數(shù),以發(fā)起一個(gè)POST請(qǐng)求到指定的URL,并加載返回的網(wǎng)頁內(nèi)容。

31、QAction *QWebEngineView::pageAction(QWebEnginePage::WebAction action) const

QAction *QWebEngineView::pageAction(QWebEnginePage::WebAction action) const 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。這個(gè)函數(shù)用于獲取與給定的QWebEnginePage::WebAction相關(guān)的QAction對(duì)象。

QWebEnginePage::WebAction是一個(gè)枚舉類型,列舉了一系列與網(wǎng)頁操作相關(guān)的動(dòng)作,如后退、前進(jìn)、刷新、停止加載、復(fù)制、粘貼等。當(dāng)你調(diào)用這個(gè)函數(shù)并傳入一個(gè)WebAction枚舉值時(shí),它會(huì)返回一個(gè)與該動(dòng)作關(guān)聯(lián)的QAction對(duì)象。

有了這個(gè)QAction對(duì)象,你就可以將其添加到菜單、工具欄或者關(guān)聯(lián)快捷鍵,使用戶能夠方便地執(zhí)行這些動(dòng)作。

示例:

QAction *backAction = webView->pageAction(QWebEnginePage::WebAction::Back);
backAction->setShortcut(QKeySequence::Back); // 設(shè)置后退按鈕的快捷鍵為Alt+左方向鍵
menu->addAction(backAction); // 將后退動(dòng)作添加到菜單中

在上述示例中,我們獲取到了與后退操作關(guān)聯(lián)的QAction對(duì)象,并為其設(shè)置了快捷鍵,并將其添加到了菜單中。這樣,用戶就可以通過菜單或快捷鍵執(zhí)行后退操作了。

32、void QWebEngineView::setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl())

void QWebEngineView::setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl()) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。這個(gè)函數(shù)用于將給定的二進(jìn)制數(shù)據(jù)加載到QWebEngineView中,并顯示為網(wǎng)頁內(nèi)容。

參數(shù)解釋:

  • const QByteArray &data: 包含要顯示的網(wǎng)頁內(nèi)容的二進(jìn)制數(shù)據(jù)。這可能是HTML、CSS、JavaScript或者其他符合某種MIME類型的文件內(nèi)容。
  • const QString &mimeType: 指定數(shù)據(jù)的MIME類型,例如 "text/html"、"image/jpeg" 等。如果省略此參數(shù),默認(rèn)為空字符串,通常在這種情況下,如果數(shù)據(jù)看起來像HTML,WebKit引擎會(huì)嘗試將其當(dāng)作HTML處理。
  • const QUrl &baseUrl: 指定基礎(chǔ)URL,用于解析相對(duì)URL。如果省略此參數(shù),默認(rèn)為空QUrl。在處理包含相對(duì)URL的文檔時(shí),基礎(chǔ)URL是非常重要的,因?yàn)樗鼤?huì)影響資源加載路徑的解析。

使用示例:

QByteArray htmlData = "&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello, World!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;";
QUrl base("http://example.com");
webView-&gt;setContent(htmlData, "text/html", base);

上述代碼將一段HTML數(shù)據(jù)加載到QWebEngineView中,并設(shè)置了一個(gè)基礎(chǔ)URL。這樣,如果HTML文檔中有引用相對(duì)路徑的資源(如圖像、CSS文件等)

33、void QWebEngineView::setHtml(const QString &html, const QUrl &baseUrl = QUrl())

void QWebEngineView::setHtml(const QString &html, const QUrl &baseUrl = QUrl()) 是Qt WebEngine模塊中的一個(gè)函數(shù),它用于在 QWebEngineView 組件中顯示HTML內(nèi)容。這個(gè)函數(shù)接受兩個(gè)參數(shù):

const QString &html: 這是你想要顯示的HTML內(nèi)容字符串。

const QUrl &baseUrl = QUrl(): 這是基礎(chǔ)URL,用于解析HTML內(nèi)容中相對(duì)路徑的鏈接和其他資源。如果省略或者留空,默認(rèn)的基礎(chǔ)URL將是空的。

使用示例:

QString htmlContent = "<html><body><h1>Hello, World!</h1></body></html>";
QUrl baseUri("http://example.com"); // 可以留空,表示沒有基礎(chǔ)URL
myWebEngineView->setHtml(htmlContent, baseUri);

在這段代碼中,myWebEngineView 是一個(gè) QWebEngineView 類型的對(duì)象,通過調(diào)用 setHtml 函數(shù),我們可以把 htmlContent 字符串中的HTML內(nèi)容顯示在這個(gè)瀏覽器組件中,同時(shí)指定基礎(chǔ)URL為 "http://example.com"。如果HTML內(nèi)容中有相對(duì)路徑的鏈接或引用資源,引擎將使用提供的基礎(chǔ)URL來解析它們。

34、void QWebEngineView::setPage(QWebEnginePage *page)

QWebEngineView類的一個(gè)函數(shù),用于設(shè)置QWebEngineView所使用的QWebEnginePage頁面對(duì)象。

QWebEngineView是用來顯示網(wǎng)頁內(nèi)容的主要視圖組件,而QWebEnginePage則是承載網(wǎng)頁內(nèi)容和網(wǎng)頁腳本執(zhí)行環(huán)境的實(shí)際載體。通過調(diào)用 setPage 函數(shù),您可以將一個(gè)已經(jīng)創(chuàng)建好的QWebEnginePage對(duì)象賦給QWebEngineView,使視圖顯示該頁面的內(nèi)容。

例如:

QWebEnginePage *newPage = new QWebEnginePage(this);
// 可以對(duì)newPage做進(jìn)一步的設(shè)置,如設(shè)置頁面代理、設(shè)置JavaScript權(quán)限等
QWebEngineView *webView = new QWebEngineView(parent);
webView->setPage(newPage);
// 加載網(wǎng)頁
newPage->load(QUrl("http://www.example.com"));

在這段代碼中,首先創(chuàng)建了一個(gè)新的QWebEnginePage對(duì)象newPage,然后創(chuàng)建了一個(gè)QWebEngineView對(duì)象webView,并通過setPage函數(shù)將newPage設(shè)置為webView要顯示的頁面,最后加載了一個(gè)網(wǎng)址到newPage中,這樣webView就會(huì)顯示這個(gè)網(wǎng)頁的內(nèi)容。

35、QWebEngineSettings *QWebEngineView::settings() const

QWebEngineSettings *QWebEngineView::settings() const 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù)。這個(gè)函數(shù)返回一個(gè)指向QWebEngineSettings對(duì)象的指針,該對(duì)象包含了與QWebEngineView關(guān)聯(lián)的網(wǎng)頁渲染和行為相關(guān)的各種設(shè)置選項(xiàng)。

通過這個(gè)函數(shù),您可以獲取并修改QWebEngineView的各種高級(jí)設(shè)置,比如:

  • JavaScript是否啟用
  • 是否允許彈出窗口
  • 是否加載圖片
  • 是否啟用網(wǎng)頁插件
  • 是否啟用網(wǎng)頁存儲(chǔ)數(shù)據(jù)(如cookies、localStorage等)
  • 用戶代理字符串設(shè)置
  • 網(wǎng)頁安全策略等等

示例:

QWebEngineView *webView = new QWebEngineView(parent);
QWebEngineSettings *settings = webView->settings();

// 禁止加載圖片
settings->setAttribute(QWebEngineSettings::AutoLoadImages, false);

// 允許JavaScript執(zhí)行
settings->setAttribute(QWebEngineSettings::JavascriptEnabled, true);

在這個(gè)示例中,我們首先獲取了QWebEngineView的設(shè)置對(duì)象,然后分別禁止了圖片的自動(dòng)加載,并啟用了JavaScript執(zhí)行。

36、void QWebEngineView::showEvent(QShowEvent *event)

void QWebEngineView::showEvent(QShowEvent *event) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)覆蓋方法,它是對(duì)QWidget的showEvent事件進(jìn)行處理的函數(shù)。當(dāng)QWebEngineView組件即將變?yōu)榭梢姞顟B(tài)時(shí)(即從隱藏變?yōu)轱@示),這個(gè)事件處理器會(huì)被調(diào)用。

通常在重寫這個(gè)方法時(shí),你可以在這里做一些在視圖顯示之前或者顯示時(shí)需要執(zhí)行的操作,比如加載網(wǎng)頁、調(diào)整視圖大小、初始化視圖狀態(tài)等。例如:

void MyWebEngineView::showEvent(QShowEvent *event)
{
    // 調(diào)用父類的showEvent方法以確保默認(rèn)處理得以執(zhí)行
    QWebEngineView::showEvent(event);

    // 在視圖顯示時(shí)加載一個(gè)初始網(wǎng)頁
    load(QUrl("https://www.example.com"));

    // 或者執(zhí)行其他與視圖顯示相關(guān)的操作
}

在這個(gè)示例中,當(dāng)MyWebEngineView變?yōu)榭梢姇r(shí),它會(huì)加載指定的網(wǎng)頁地址。當(dāng)然,你可以根據(jù)實(shí)際需求在這個(gè)函數(shù)中執(zhí)行其他定制的操作。

37、QSize QWebEngineView::sizeHint() const

QSize QWebEngineView::sizeHint() const 是Qt WebEngine模塊中QWebEngineView類的一個(gè)成員函數(shù),它返回一個(gè)QSize對(duì)象,表示QWebEngineView組件建議的最佳大?。╯ize hint)。

這個(gè)大小通常是由QWebEngineView內(nèi)部根據(jù)其內(nèi)容(如加載的網(wǎng)頁大?。┯?jì)算得出的,用于向布局管理器提供一個(gè)參考大小。布局管理器可以根據(jù)這個(gè)提示信息來更好地安排組件的布局,但最終的大小可能會(huì)因?yàn)椴季旨s束或者其他因素而不同于這個(gè)size hint。

在實(shí)踐中,如果你想要獲取QWebEngineView在其內(nèi)容加載完畢后的理想大小,可以調(diào)用這個(gè)函數(shù)獲取。然而,具體的顯示大小仍需由其父窗口或布局管理器決定。

38、void QWebEngineView::triggerPageAction(QWebEnginePage::WebAction action, bool checked = false)

void QWebEngineView::triggerPageAction(QWebEnginePage::WebAction action, bool checked = false) 是Qt WebEngine模塊中QWebEngineView類的一個(gè)函數(shù),它用于觸發(fā)與給定WebAction枚舉值關(guān)聯(lián)的頁面操作。

QWebEnginePage::WebAction是一個(gè)枚舉類型,包含了多種預(yù)定義的網(wǎng)頁操作,如打開新窗口、后退、前進(jìn)、刷新、停止加載、打印等。

函數(shù)參數(shù)說明:

  • QWebEnginePage::WebAction action:指定要觸發(fā)的WebAction操作,例如 QWebEnginePage::Back 表示后退,QWebEnginePage::Reload 表示刷新頁面等。
  • bool checked = false:對(duì)于某些操作,如檢查/取消檢查復(fù)選框(例如“是否啟用Java”這類設(shè)置),這個(gè)參數(shù)用于指定操作的開關(guān)狀態(tài)。對(duì)于大多數(shù)WebAction而言,這個(gè)參數(shù)并不重要,但對(duì)于某些涉及狀態(tài)切換的操作可能需要設(shè)置。

例如,觸發(fā)頁面后退操作:

webEngineView->triggerPageAction(QWebEnginePage::Back);

觸發(fā)頁面刷新操作:

webEngineView->triggerPageAction(QWebEnginePage::Reload);

總結(jié) 

到此這篇關(guān)于QT的QWebEngineView類知識(shí)點(diǎn)的文章就介紹到這了,更多相關(guān)QT的QWebEngineView類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論