1
아래 코드는 모델이있는 단일 QListView를 만듭니다. 해당 항목을 클릭하면 해당 항목이 모델에서 삭제됩니다. 그러나 QListView
은 여전히 모델 항목의 수가 변경되지 않았 음을보고합니다 (삭제 된 항목이없는 것처럼). 그것을 고칠 방법이 있습니까?model()을 사용하여 항목을 삭제 한 후 정리하는 방법
class Model(QtCore.QAbstractListModel):
def __init__(self):
QtCore.QAbstractListModel.__init__(self)
self.items=[]
self.modelDict={}
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.modelDict)
def data(self, index, role):
if not index.isValid():
return QtCore.QVariant()
if not (0 <= index.row() < len(self.items)):
return QtCore.QVariant()
if not index.isValid():
return QtCore.QVariant()
if role==QtCore.Qt.ItemDataRole:
key=str(index.data().toString())
returnedValue=self.modelDict.get(key)
return QtCore.QVariant(returnedValue)
elif role==QtCore.Qt.DisplayRole:
row=index.row()
itemTitle=self.items[row]
return QtCore.QVariant(itemTitle)
def addItems(self):
for key in self.modelDict:
index=QtCore.QModelIndex()
self.beginInsertRows(index, 0, 0)
self.items.append(key)
inst=self.modelDict.get(key)
self.setData(index, QtCore.QVariant(inst), QtCore.Qt.DisplayRole)
self.endInsertRows()
def removeByIndex(self, index):
if not index.isValid(): return
row=index.row()
self.beginRemoveRows(QtCore.QModelIndex(), row, 0)
self.items=self.items[:row]+self.items[row+1:]
self.endRemoveRows()
class ListView(QtGui.QListView):
def __init__(self):
super(ListView, self).__init__()
self.model= Model()
self.model.modelDict=elements
self.model.addItems()
self.setModel(self.model)
self.clicked.connect(self.itemClicked)
self.show()
def itemClicked(self, index):
print 'NUMBER OF ITEMS BEFORE DELETE: %s'%self.model.rowCount()
self.model.removeByIndex(index)
print 'NUMBER OF ITEMS AFTER DELETE: %s'%self.model.rowCount()
window=ListView()
sys.exit(app.exec_())
변경할 수 있습니까? diff를 만드는 데는 유감 스럽기 때문에. – UmNyobe