QT的QWebEngineView類知識(shí)點(diǎn)詳細(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è)使用QWebEngineView
和back()
函數(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)槽語法中,使用SIGNAL
和SLOT
宏。
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ù)中撤銷之前在dragEnterEvent
或dragMoveEvent
中設(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 = "<html><body><h1>Hello, World!</h1></body></html>"; QUrl base("http://example.com"); webView->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)文章
基于Qt實(shí)現(xiàn)C/C++調(diào)用Matlab函數(shù)全過程
這篇文章給大家詳細(xì)介紹了基于Qt平臺(tái)實(shí)現(xiàn)C/C++調(diào)用Matlab函數(shù)全流程,文中通過圖文和代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01STL priority_queue(優(yōu)先隊(duì)列)詳解
這篇文章主要介紹了 STL priority_queue(優(yōu)先隊(duì)列)詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10visual?studio?將編譯后的dll等文件自動(dòng)復(fù)制到指定目錄的方法
這篇文章主要介紹了visual?studio?將編譯后的dll等文件自動(dòng)復(fù)制到指定目錄,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-03-03C語言 解決不用+、-、×、÷數(shù)字運(yùn)算符做加法的實(shí)現(xiàn)方法
本篇文章是對(duì)在C語言中解決不用+、-、×、÷數(shù)字運(yùn)算符做加法的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言使用posix正則表達(dá)式庫的實(shí)現(xiàn)
在C語言中,你可以使用 POSIX 正則表達(dá)式庫(regex.h)來進(jìn)行正則表達(dá)式的模式匹配,本文主要介紹了C語言使用posix正則表達(dá)式庫的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12使用C語言實(shí)現(xiàn)CRC校驗(yàn)的方法
本篇文章是對(duì)使用C語言實(shí)現(xiàn)CRC校驗(yàn)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05