杯子和盘子 |
2019-11-07 12:19 |
我的解决办法是:子类化QWebEngineView,设置上下文菜单模式为Qt::DefaultContextMenu,然后重新实现contextMenuEvent(QContextMenuEvent* event)即可,亲测有效
#ifndef webview_h__ #define webview_h__ #include <QWebEngineView> class QMenu; class QAction; class CWebView : public QWebEngineView { Q_OBJECT public: CWebView(QWidget* parent = nullptr); ~CWebView(){}; protected: void contextMenuEvent(QContextMenuEvent* event); private: QMenu* m_pContextMenu; QAction* m_pBackAct; QAction* m_pForwardAct; QAction* m_pReloadAct; }; #endif // webview_h__
#include "webview.h" #include <QMenu> #include <QAction> #include <QIcon> #include <QWebEngineHistory>
CWebView::CWebView(QWidget* parent /*= nullptr*/) : QWebEngineView(parent) { m_pContextMenu = new QMenu; m_pBackAct = new QAction(QIcon::fromTheme(QStringLiteral("go-previous")), tr("Back")); m_pForwardAct = new QAction(QIcon::fromTheme(QStringLiteral("go-next")), tr("Forward")); m_pReloadAct = new QAction(QIcon::fromTheme(QStringLiteral("view-refresh")), tr("Reload")); m_pContextMenu->addAction(m_pBackAct); m_pContextMenu->addAction(m_pForwardAct); m_pContextMenu->addAction(m_pReloadAct); connect(m_pBackAct, &QAction::triggered, this, &QWebEngineView::back); connect(m_pForwardAct, &QAction::triggered, this, &QWebEngineView::forward); connect(m_pReloadAct, &QAction::triggered, this, &QWebEngineView::reload);
setContextMenuPolicy(Qt::DefaultContextMenu); }
void CWebView::contextMenuEvent(QContextMenuEvent* event) { m_pBackAct->setEnabled(this->history()->canGoBack()); m_pForwardAct->setEnabled(this->history()->canGoForward());
m_pContextMenu->exec(QCursor::pos()); }
最后配置自己的翻译文件即可
|
|