#include "cwebengineview.h" #include #include "CWebEngineView.h" CWebEngineView::CWebEngineView(QWidget *parent) : QWebEngineView(parent) { // 记录首页URL connect( this, &QWebEngineView::loadFinished, this, [&](bool ok) { if (ok) { firstURL = page()->url(); } }, Qt::SingleShotConnection); // 获取当前页面的profile QWebEngineProfile *profile = page()->profile(); // 启用缓存 profile->setHttpCacheType(QWebEngineProfile::MemoryHttpCache); profile->setPersistentCookiesPolicy( QWebEngineProfile::ForcePersistentCookies); // 获取设置对象 QWebEngineSettings *settings = page()->settings(); // 启用硬件加速 settings->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled, true); settings->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true); // 其他设置 settings->setAttribute(QWebEngineSettings::JavascriptEnabled, true); settings->setAttribute(QWebEngineSettings::PluginsEnabled, true); settings->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); settings->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); } CWebEngineView::~CWebEngineView() { QWebEnginePage *page = this->page(); if (page != nullptr) { delete page; } } QWebEngineView *CWebEngineView::createWindow( QWebEnginePage::WebWindowType type) { if (type == QWebEnginePage::WebBrowserTab) { QWebEnginePage *new_page = new QWebEnginePage(this->page()->profile(), this); this->setPage(new_page); connect(new_page, &QWebEnginePage::destroyed, new_page, [new_page]() { new_page->deleteLater(); }); // connect(page(), &QWebEnginePage::urlChanged, this, [&](const QUrl // &url) { // qDebug() << "**********GoTo URL:" << url.toString(); // }); } return this; } void CWebEngineView::contextMenuEvent(QContextMenuEvent *event) { // 创建一个新的菜单 QMenu menu(this); menu.setStyleSheet( "QMenu{background-color: white;color: black;}QMenu::item:selected " "{background-color: lightgray;color: black;}"); // 添加自定义菜单项 QAction *forwardAction = menu.addAction("前进"); QAction *backAction = menu.addAction("后退"); QAction *reloadAction = menu.addAction("刷新"); // 显示菜单 QAction *action = menu.exec(event->globalPos()); if (action) { QWebEnginePage *page = this->page(); if (action == forwardAction) { if (page->history()->canGoForward()) { page->triggerAction(QWebEnginePage::Forward); } } else if (action == backAction) { if (page->history()->canGoBack()) { page->triggerAction(QWebEnginePage::Back); } else if (page->url() == page->history()->items()[0].url()) { page->load(firstURL); } // qDebug() << "**********History URL:" // << this->page()->history()->items()[0].url().toString(); } else if (action == reloadAction) { page->triggerAction(QWebEnginePage::Reload); } } }