为什么QTreeView中的编辑会由我启用的触发器以外的其他触发器启动?
我只在中启用了编辑触发器,但由于其他原因(例如,为什么QTreeView中的编辑会由我启用的触发器以外的其他触发器启动?,qt,python-3.x,pyqt,qt5,pyqt5,Qt,Python 3.x,Pyqt,Qt5,Pyqt5,我只在中启用了编辑触发器,但由于其他原因(例如,CurrentChanged),仍会触发项目编辑(通过该方法)。为什么其他触发器处于活动状态 有关示例,请参见下面的程序,单击树项目时,您应该会看到,由于几个不同的原因触发了编辑: from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * class TreeView(QTreeView): def __init__(self):
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(请参阅)都是编辑槽作业。在代码中,edit不执行任何操作(由于未创建编辑器,因此不会对项目进行编辑)。尝试调用
super()。编辑(self、index、trigger、event)
你是说,
edit
被调用独立于editTriggers()
,但是edit
忽略了未选择的触发器?是的,据我所知,基本上就是这样。
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