Как удалить стандартный пункт меню из контекстного меню QTextEdit - PullRequest
2 голосов
/ 15 октября 2011

Итак, я довольно новичок в PySide и QT и хочу знать, как удалить пункт меню (не имеет значения, какой тип (отменить, повторить, скопировать, вставить и т. Д.)) Из стандартного контекстного меню QTextEdit.

Или скажите мне, как получить объект QMenu из этого контекстного меню.Затем я могу применить метод removeAction к пункту меню.

TIA.

Ответы [ 2 ]

3 голосов
/ 16 октября 2011

Чтобы получить полный контроль над контекстным меню, сначала используйте QWidget.setContextMenuPolicy , чтобы изменить политику контекстного меню на Qt.CustomContextMenu.Затем подключите обработчик к сигналу QWidget.customContextMenuRequested .В обработчике вы можете затем получить стандартный объект контекстного меню, используя метод QTextEdit.createStandardContextMenu .

Измените меню, как считаете нужным, и затем отобразите его, используя переданную QPointк обработчику сигнала, как это:

menu.exec_(textedit.viewport().mapToGlobal(point))
2 голосов
/ 15 октября 2011

Добро пожаловать в Писайд! : -)

Поскольку QTextEdit наследует QWidget, вы, вероятно, захотите установить политику контекстного меню на пользовательскую, а затем предоставить свое собственное всплывающее меню

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

Причина, по которой я предлагаю создать свой собственный пользовательский контекст, заключается в том, что qmenu действительно недоступен как постоянный объект в qtextedit. Его построение на лету базировалось на контексте в тот момент, когда на него щелкнули. Я не уверен, что есть метод, который вы можете перегрузить, чтобы получить доступ к qmenu, прежде чем оно будет показано. Я думаю, что лучшее, что вы можете сделать, это определить свое собственное полностью.

...