在 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
}
}
我正在编写 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
}
}