• 5768阅读
  • 5回复

求QWebEngineView 右键菜单汉化方法 [复制链接]

上一主题 下一主题
离线shixingya
 

只看楼主 倒序阅读 楼主  发表于: 2018-12-27
求QWebEngineView 右键菜单汉化方法

本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线dongfanglu

只看该作者 1楼 发表于: 2019-03-18
同问,一直找不到设置语言的方法
离线yuying

只看该作者 2楼 发表于: 2019-04-19
可以在Src\qtwebengine\src\webenginewidgets.pro 加入TRANSLATIONS 手动翻译,Qt的翻译文件没有翻译这个控件

只看该作者 3楼 发表于: 2019-11-07
我的解决办法是:子类化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());
}

最后配置自己的翻译文件即可

只看该作者 4楼 发表于: 2019-12-14
对的,直接自定义,然后调用自己处理的槽函数
离线hshuxiang

只看该作者 5楼 发表于: 2020-01-07

QT安装的时候,QWebEngine是有本地化的QM文件,只是没有简体中文的~
我选择了一个文件,把目标语言改成了简体中文。


然后自己做了简体中文的本地化~
在代码种加入
QTranslator qtwebengine_translator,qt_translator;    
qtwebengine_translator.load(QStringLiteral(":/qm/qtwebengine_cn"));    
app.installTranslator(&qtwebengine_translator);
完美实现中文汉化
快速回复
限100 字节
 
上一个 下一个