18

我有一个 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)
4

4 回答 4

43

添加行:

self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)

应该为你解决问题。

QListView继承QAbstractItemView哪个有方法setEditTriggers()。文档中提供了其他可能的值。setEditTriggers

于 2011-06-03T14:46:55.783 回答
1

感谢您的回复。我最终选择了 a QListWidget,因为默认情况下它不可编辑。

虽然我还发现如果你给QListView鼠标双击事件并将其设置为编辑之外的其他操作QListView,它会覆盖编辑功能,这样也可以工作。

于 2011-06-05T17:29:17.710 回答
0

QStringListModel根据定义是可编辑的。您应该子类化并提供适当的标志

于 2011-06-04T09:08:04.100 回答
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从任何视图进行编辑。

于 2019-04-03T20:19:12.283 回答