You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/Src/WebPage/cwebengineview.cpp

93 lines
3.0 KiB
C++

8 months ago
#include "cwebengineview.h"
#include "CWebEngineView.h"
#include <QWidget>
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);
}
8 months ago
CWebEngineView::~CWebEngineView() {
QWebEnginePage *page = this->page();
if (page != nullptr) {
delete page;
}
8 months ago
}
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;
8 months ago
}
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);
}
}
}