QTreeView中的自定义上下文菜单

时间:2016-02-24 02:08:20

标签: python pyqt pyqt4 contextmenu 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维基的另一个设计。假设NewTypeActionDeleteTypeActionQAction的子类,并且他们的构造函数适当地使用QAction.__init__的父级调用menu,为什么当我右键单击我的视图时没有&# 39; ta菜单出现了?

1 个答案:

答案 0 :(得分:0)

弄清楚了。我忘了给menu.addAction打电话给我的两个新动作。