不可编辑的QListView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不可编辑的QListView相关的知识,希望对你有一定的参考价值。

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

添加行:

self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)

应该为你解决问题。

QListView继承QAbstractItemView,它具有setEditTriggers()方法。其他用于setEditTriggers的possible values可在文档中找到。

另一答案

如果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

另一答案

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

虽然我也发现如果你给QListView一个鼠标双击事件并将其设置为除了编辑QListView之外的其他事情,它会覆盖编辑功能以便也可以。

另一答案

根据定义,QStringListModel是可编辑的。你应该继承并提供适当的flags

以上是关于不可编辑的QListView的主要内容,如果未能解决你的问题,请参考以下文章

PyQt QListView在用户界面编辑项目后检索项目

如何将 QModelIndex 设置为 QListView

用jquery设置下拉不可编辑,但是没起作用,求高手指点,急。。。

上一个问题 PySide2 QListView 和 QTableView 的新功能

QListView 在列表为空时显示文本

为啥 QListView 中看不到文件图标?