我有一个显示项目列表的QListView,但我不希望编辑这些项目(目前双击该项目可以编辑它们。)
这是我的代码:
self.listView = QListView()
self.model = QStringListModel([ "item1" , "item2" , "item3" ])
self.listView.setModel( self.model )
self.layout = QGridLayout()
self.layout.addWidget(self.listView, 0 , 0 )
self.setLayout(self.layout)
答案 0 :(得分:31)
添加行:
self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)
应该为你解决问题。
QListView继承了QAbstractItemView,它具有方法setEditTriggers()。文档中提供了setEditTriggers的其他possible values。
答案 1 :(得分:0)
感谢您的回复。我最后选择了QListWidget
,因为默认情况下它不可编辑。
虽然我也发现如果你给QListView
鼠标双击事件并将其设置为执行除编辑QListView
以外的其他操作,它会覆盖编辑功能以便也能正常工作。
答案 2 :(得分:0)
如果model
将附加到多个视图,并且您不希望它们可被任何视图编辑,则可以将QStringListModel
子类化并覆盖flags()
:
from PyQt5.QtCore import Qt
class UneditableStringListModel(QStringListModel):
def flags(self, index):
return Qt.ItemIsSelectable & Qt.ItemIsEnabled
listView = QListView()
model = UneditableStringListModel([ "item1" , "item2" , "item3" ])
listView.setModel(model)
现在,用户将无法从任何视图编辑model
。
答案 3 :(得分:-1)
根据定义,QStringListModel是可编辑的。您应该子类并提供适当的flags