我在 QTreeView 中只启用了 SelectedClicked 编辑触发器,但由于其他原因(例如,CurrentChanged
),项目编辑(通过编辑方法)仍然被触发。为什么其他触发器处于活动状态?
有关示例,请参阅下面的程序,单击树项时,您应该看到由于几个不同的原因而触发编辑:
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class TreeView(QTreeView):
def __init__(self):
super().__init__()
self.setEditTriggers(self.SelectedClicked)
self.__model = QStandardItemModel()
self.__model.appendRow([QStandardItem('Item 1')])
self.__model.appendRow([QStandardItem('Item 2')])
self.setModel(self.__model)
def edit(self, index, trigger, event):
print('Edit index {},{}, trigger: {}'.format(index.row(), index.column(), trigger))
return False
app = QApplication([])
w = TreeView()
w.show()
app.exec_()
无论您使用什么 EditTrigger,都将始终调用 edit。但是,根据您指定的触发器,编辑槽作业是创建或不创建编辑器,并返回 true 或 false(请参阅 Qt 文档)。在代码中,编辑不执行任何操作(并且不会编辑该项,因为未创建编辑器)。尝试调用super().edit(self, index, trigger, event)
。
def edit(self, index, trigger, event):
res = super().edit(index, trigger, event)
print('Edit {},{}, trigger: {}, accepted: {}'.format(index.row(), index.column(), trigger, res))
return res