簡單的問題。我想用F2或Enter進行重命名,然後雙擊打開一個文件。如何在PyQt中禁用QTreeView和QFileSystemModel上的雙擊文件重命名行爲?
使用self.treeView.doubleClicked.connect(self.doubleclick)
我可以在我的self.doubleClick
方法中執行某些操作,但重命名仍然被觸發。
該模型不是隻讀的(model.setReadOnly(False)
)。
簡單的問題。我想用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)
我不知道你是否有這個在Python版本,但在C++的Qt您只需設置編輯觸發器在QAbstractItemView中:
void setEditTriggers (EditTriggers triggers)
剛剛重溫這個,你說得對:我完全忽略了'setEditTriggers'。 – ekhumoro
有關如何使用此功能的示例,請參閱http://stackoverflow.com/questions/18831242/qt-start-editing-of-cell-after-one-click/31197990#31197990 –
另外請注意,您可以按F2重命名觸發,所以這不處理。 –
@GreenCell。 OP特意要求停止雙擊編輯,這就是示例代碼的作用。它可以很容易地適用於處理其他類型的編輯(包括F2 - 或者更準確地說,[平臺編輯鍵](https://doc.qt.io/qt-4.8/qabstractitemview.html#EditTrigger-enum) )。 – ekhumoro
是的,我知道,但F2是一個很容易被忽視的微妙東西。想到我提到它,以防有人沒有想到它。 –