如何从QTextEdit上下文菜单中移除标准菜单项

2 投票
2 回答
2545 浏览
提问于 2025-04-17 04:23

我刚开始学习PySide和QT,想知道怎么从QTextEdit的标准右键菜单中删除菜单项(不管是什么类型的,比如撤销、重做、复制、粘贴等等)。

或者告诉我怎么获取这个右键菜单的QMenu对象。这样我就可以对菜单项使用removeAction方法来删除它。

谢谢!

2 个回答

2

欢迎来到pyside!:-)

因为QTextEdit是从QWidget这个类继承来的,所以你可能想把右键菜单的设置改成自定义,然后自己提供一个弹出菜单。

http://www.pyside.org/docs/pyside/PySide/QtGui/QWidget.html#PySide.QtGui.PySide.QtGui.QWidget.contextMenuPolicy

我建议你自己创建一个自定义的右键菜单,原因是QMenu在QTextEdit上并不是一个持久存在的对象。它是根据你点击时的上下文动态生成的。我不太确定有没有方法可以在菜单显示之前访问QMenu。我觉得你能做的最好就是完全自己定义一个菜单。

3

要完全控制右键菜单,首先需要使用 QWidget.setContextMenuPolicy 来把右键菜单的设置改为 Qt.CustomContextMenu。接着,连接一个处理函数到 QWidget.customContextMenuRequested 信号。在这个处理函数里,你可以使用 QTextEdit.createStandardContextMenu 方法来获取一个标准的右键菜单对象。

根据需要修改这个菜单,然后使用传递给信号处理函数的 QPoint 来显示它,像这样:

menu.exec_(textedit.viewport().mapToGlobal(point))

撰写回答