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"
CustomWebEnginePage::CustomWebEnginePage(QObject *parent/* = Q_NULLPTR*/)
: QWebEnginePage(parent)
{
connect(this, &CustomWebEnginePage::featurePermissionRequested, this, &CustomWebEnginePage::onFeaturePermissionRequested);
#include <QWebEngineHistory>
CustomWebEnginePage::CustomWebEnginePage(QObject *parent /* = Q_NULLPTR*/)
: QWebEnginePage(parent) {
connect(this, &CustomWebEnginePage::featurePermissionRequested, this,
&CustomWebEnginePage::onFeaturePermissionRequested);
}
bool CustomWebEnginePage::certificateError(const QWebEngineCertificateError &certificateError)
{
return true;
bool CustomWebEnginePage::certificateError(
const QWebEngineCertificateError &certificateError) {
return true;
}
void CustomWebEnginePage::onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature)
{
if (feature == QWebEnginePage::MediaAudioCapture
|| feature == QWebEnginePage::MediaVideoCapture
|| feature == QWebEnginePage::MediaAudioVideoCapture)
setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionGrantedByUser);
else
setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionDeniedByUser);
void CustomWebEnginePage::onFeaturePermissionRequested(
const QUrl &securityOrigin, QWebEnginePage::Feature feature) {
if (feature == QWebEnginePage::MediaAudioCapture ||
feature == QWebEnginePage::MediaVideoCapture ||
feature == QWebEnginePage::MediaAudioVideoCapture)
setFeaturePermission(securityOrigin, feature,
QWebEnginePage::PermissionGrantedByUser);
else
setFeaturePermission(securityOrigin, feature,
QWebEnginePage::PermissionDeniedByUser);
}

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

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

@ -1,26 +1,25 @@
#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QLocale>
#include <QTranslator>
#include <QFile>
int main(int argc, char *argv[])
{
//QApplication::setAttribute(Qt::AA_UseOpenGLES);
QApplication a(argc, argv);
QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "PayloadAPP_" + QLocale(locale).name();
if (translator.load(":/i18n/" + baseName)) {
a.installTranslator(&translator);
break;
}
int main(int argc, char *argv[]) {
// QApplication::setAttribute(Qt::AA_UseOpenGLES);
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--enable-gpu-rasterization");
QApplication a(argc, argv);
QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "PayloadAPP_" + QLocale(locale).name();
if (translator.load(":/i18n/" + baseName)) {
a.installTranslator(&translator);
break;
}
}
MainWindow w;
w.show();
return a.exec();
MainWindow w;
w.show();
return a.exec();
}

Loading…
Cancel
Save