22

I have a QListView displaying a list of items but I don't want the items to be edited (Currently a double click on the item allows you to edit them).

This is my Code:

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)
Jay
  • 3,373
  • 6
  • 38
  • 55

4 Answers4

48

Adding the line:

self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)

should fix things for you.

QListView inherits QAbstractItemView which has the method setEditTriggers(). Other possible values for setEditTriggers are available in the docs.

Aykhan Hagverdili
  • 28,141
  • 6
  • 41
  • 93
Gary Hughes
  • 4,400
  • 1
  • 26
  • 40
  • 1
    This is more of a hack as it will still be editable, just not through this particular view. – gwohpq9 Jun 04 '11 at 09:13
  • 1
    listView.setEditTriggers(QAbstractItemView::NoEditTriggers); for C++ qt –  Apr 28 '21 at 06:55
2

Thanks for the responses. I ended up going with a QListWidget instead as it is not editable by default.

Though I also found if you give the QListView a mouse Double clicked event and set it to do something other than edit the QListView, it overrides the edit function so that works too.

Aykhan Hagverdili
  • 28,141
  • 6
  • 41
  • 93
Jay
  • 3,373
  • 6
  • 38
  • 55
0

If model will be attached to multiple views and you don't want it to be editable by any of them, you can subclass QStringListModel and override 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)

Now the user will not be able to edit model from any view.

jpyams
  • 4,030
  • 9
  • 41
  • 66
0

QStringListModel is by definition editable. You should subclass and provide the appropriate flags

gwohpq9
  • 2,143
  • 2
  • 18
  • 18