Merge pull request 'feat: 网页新增右键导航菜单' (#13) from WuChengBo into main

Reviewed-on: #13
pull/14/head
WuChengbo 6 months ago
commit 717914a589

@ -1,22 +1,24 @@
#include "customwebenginepage.h" #include "customwebenginepage.h"
#include <QWebEngineHistory>
CustomWebEnginePage::CustomWebEnginePage(QObject *parent/* = Q_NULLPTR*/) CustomWebEnginePage::CustomWebEnginePage(QObject *parent /* = Q_NULLPTR*/)
: QWebEnginePage(parent) : QWebEnginePage(parent) {
{ connect(this, &CustomWebEnginePage::featurePermissionRequested, this,
connect(this, &CustomWebEnginePage::featurePermissionRequested, this, &CustomWebEnginePage::onFeaturePermissionRequested); &CustomWebEnginePage::onFeaturePermissionRequested);
} }
bool CustomWebEnginePage::certificateError(const QWebEngineCertificateError &certificateError) bool CustomWebEnginePage::certificateError(
{ const QWebEngineCertificateError &certificateError) {
return true; return true;
} }
void CustomWebEnginePage::onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature) void CustomWebEnginePage::onFeaturePermissionRequested(
{ const QUrl &securityOrigin, QWebEnginePage::Feature feature) {
if (feature == QWebEnginePage::MediaAudioCapture if (feature == QWebEnginePage::MediaAudioCapture ||
|| feature == QWebEnginePage::MediaVideoCapture feature == QWebEnginePage::MediaVideoCapture ||
|| feature == QWebEnginePage::MediaAudioVideoCapture) feature == QWebEnginePage::MediaAudioVideoCapture)
setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionGrantedByUser); setFeaturePermission(securityOrigin, feature,
QWebEnginePage::PermissionGrantedByUser);
else else
setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionDeniedByUser); setFeaturePermission(securityOrigin, feature,
QWebEnginePage::PermissionDeniedByUser);
} }

@ -1,11 +1,41 @@
#include "cwebengineview.h" #include "cwebengineview.h"
#include "CWebEngineView.h" #include "CWebEngineView.h"
#include <QWebEngineHistory>
#include <QWidget> #include <QWidget>
CWebEngineView::CWebEngineView(QWidget *parent) : QWebEngineView(parent) {} 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() { CWebEngineView::~CWebEngineView() {
QWebEnginePage *page = this->page(); QWebEnginePage *page = this->page();
@ -20,6 +50,43 @@ CWebEngineView::createWindow(QWebEnginePage::WebWindowType type) {
QWebEnginePage *new_page = QWebEnginePage *new_page =
new QWebEnginePage(this->page()->profile(), this); new QWebEnginePage(this->page()->profile(), this);
this->setPage(new_page); 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; 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);
}
}
}

@ -1,6 +1,12 @@
#ifndef CWEBENGINEVIEW_H #ifndef CWEBENGINEVIEW_H
#define CWEBENGINEVIEW_H #define CWEBENGINEVIEW_H
#include <QContextMenuEvent>
#include <QMenu>
#include <QWebEngineContextMenuRequest>
#include <QWebEngineHistory>
#include <QWebEngineProfile>
#include <QWebEngineSettings>
#include <QWebEngineView> #include <QWebEngineView>
class QWidget; class QWidget;
@ -15,6 +21,11 @@ public:
protected: protected:
// 解决错误qt No RenderWidgetHost exists with id 10 in process 3 // 解决错误qt No RenderWidgetHost exists with id 10 in process 3
virtual QWebEngineView *createWindow(QWebEnginePage::WebWindowType type); virtual QWebEngineView *createWindow(QWebEnginePage::WebWindowType type);
// 自定义右键菜单
void contextMenuEvent(QContextMenuEvent *event) override;
private:
QUrl firstURL;
}; };
#endif // CWEBENGINEVIEW_H #endif // CWEBENGINEVIEW_H

@ -1,14 +1,13 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QApplication> #include <QApplication>
#include <QFile>
#include <QLocale> #include <QLocale>
#include <QTranslator> #include <QTranslator>
#include <QFile>
int main(int argc, char *argv[])
{
//QApplication::setAttribute(Qt::AA_UseOpenGLES);
int main(int argc, char *argv[]) {
// QApplication::setAttribute(Qt::AA_UseOpenGLES);
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--enable-gpu-rasterization");
QApplication a(argc, argv); QApplication a(argc, argv);
QTranslator translator; QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages(); const QStringList uiLanguages = QLocale::system().uiLanguages();

Loading…
Cancel
Save