如何在PyQt中禁用QTreeView和QFileSystemModel上的双击文件重命名行为?

问题描述:

简单的问题。我想用F2或Enter进行重命名,然后双击打开一个文件。如何在PyQt中禁用QTreeView和QFileSystemModel上的双击文件重命名行为?

使用self.treeView.doubleClicked.connect(self.doubleclick)我可以在我的self.doubleClick方法中执行某些操作,但重命名仍然被触发。

该模型不是只读的(model.setReadOnly(False))。

默认情况下,doubleClicked信号在正常编辑操作之前发出,该操作由QAbstractItemView.edit函数执行。

幸运的是,这个功能是虚拟的,所以它可以在子类中重新实现:

class TreeView(QtGui.QTreeView):  
    def edit(self, index, trigger, event): 
     if trigger == QtGui.QAbstractItemView.DoubleClicked: 
      print 'DoubleClick Killed!' 
      return False 
     return QtGui.QTreeView.edit(self, index, trigger, event) 
+0

另外请注意,您可以按F2重命名触发,所以这不处理。 –

+0

@GreenCell。 OP特意要求停止双击编辑,这就是示例代码的作用。它可以很容易地适用于处理其他类型的编辑(包括F2 - 或者更准确地说,[平台编辑键](https://doc.qt.io/qt-4.8/qabstractitemview.html#EditTrigger-enum) )。 – ekhumoro

+0

是的,我知道,但F2是一个很容易被忽视的微妙东西。想到我提到它,以防有人没有想到它。 –

我不知道你是否有这个在Python版本,但在C++的Qt您只需设置编辑触发器在QAbstractItemView中:

void setEditTriggers (EditTriggers triggers)

+0

刚刚重温这个,你说得对:我完全忽略了'setEditTriggers'。 – ekhumoro

+0

有关如何使用此功能的示例,请参阅http://*.com/questions/18831242/qt-start-editing-of-cell-after-one-click/31197990#31197990 –