为什么在 QTreeView 中进行编辑是由我启用的触发器以外的其他触发器启动的



我在 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 

相关内容

  • 没有找到相关文章

最新更新