在 WebEngineView 中禁用 qml 的上下文菜单

Disable context menu from qml in WebEngineView

我正在编写 WebEngineView,我想禁用它的上下文菜单。 对于我已经发现的,我必须调用 QWidget 的 setContexMenuPolicy。 不幸的是,我在网上找到的所有帮助都显示了如何从 C++ 代码执行此操作,而我需要从我的 .qml 文件中完成所有操作(我无权访问 C++ 代码)。

我尝试 this.setContextMenuPolicy(...) 来自 WebEngineView 内部的 Component.onCompleted 信号,但没有成功。

如果 QML 中的 QWidget 函数未通过 Q_PROPERTY 转发,您将无法访问它们。你应该阅读 The Property System.

我的解决方案有点麻烦。它使用 MouseArea 消耗鼠标右键单击,基本上阻止对 WebEngineView:

的所有右键单击

更新!

import QtQuick 2.0
import QtQuick.Window 2.0
import QtWebEngine 1.0

Window {
    width: 1024
    height: 750
    visible: true
    WebEngineView {
        anchors.fill: parent
        url: "https://www.qt.io"
    }

    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
        onPressed: {
            if (mouse.button === Qt.RightButton)
                mouse.accepted = true
        }
    }
}

我找到了适合我的情况的其他方法:

WebEngineView {
    anchors.fill: parent
    url: "https://www.example.com"
    onContextMenuRequested: {
        request.accepted = true
    }
}