0
я в настоящее время этот виджет диалога:Пользовательское контекстное меню в QTreeView
class TaskTypeTreeEditor(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self._view = QTreeView()
self._view.setItemDelegate(TaskTypeNameDelegate())
self._view.setContextMenuPolicy(Qt.CustomContextMenu)
self._view.customContextMenuRequested.connect(self._open_menu)
self._refresh()
layout = QVBoxLayout()
layout.addWidget(self._view)
self.setLayout(layout)
self.setWindowTitle(_('Admin.editTaskType'))
def _open_menu(self, position):
indexes = self._view.selectedIndexes()
if len(indexes) == 0:
return
menu = QMenu()
ids = [index.internalPointer().type_id for index in indexes]
if len(indexes) == 1:
NewTypeAction(ids[0], self._refresh, menu)
DeleteTypeAction(ids, self._refresh, menu)
menu.exec_(self._view.viewport().mapToGlobal(position))
def _refresh(self):
model = TaskTypeTreeModel()
self._view.setModel(model)
self._view.expandAll()
Это было основано на другой проект из вики Python. Предполагая, что NewTypeAction
и DeleteTypeAction
являются подклассами QAction
, и их конструкторы соответствующим образом вызывают QAction.__init__
с родителем menu
, почему при первом щелчке правой кнопки мыши в моем представлении не отображается меню?
Образованное предположение: потому что 'indexes' пуст? – ekhumoro
@ekhumoro Nope. Я сделал быстрый тест, и он продолжает выполняться. Похоже, что на самом деле создается пустым меню, несмотря на то, что я передал родительский элемент при создании действия. Я могу сказать, потому что мой следующий щелчок игнорируется после щелчка правой кнопкой мыши; Раньше я этого не замечал. – 2mac
Ну, так как никто другой не может увидеть соответствующий код, я полагаю, вам решать остальную часть отладки ;-) – ekhumoro