У меня есть qListView, заполненный элементами, которые на самом деле являются именами файлов, которые я читаю из папки. Теперь, используя действие контекстного меню «удалить», я удаляю соответствующий файл в фоновом режиме.В qListView удаленные элементы не обновляются в поле зрения
Проблема заключается в qListView, не получающем обновления, т.е. он все еще показывает элемент, который я уже удаляю.
Мой запрос: как обновить представление динамически? Я новичок в программировании MVC, задавался вопросом, возможно ли это сделать в модели? Или мне нужно использовать рекурсивную функцию для обновления представлений. BTW m с использованием модели qAbstract list и даже попробовал currentItemChanged и dataChanged, но ничего не работает.
TestStepInstViewHdlr является экземпляром класса QListView:
TestStepInstViewHdlr.setSelectionMode(QAbstractItemView.MultiSelection)
TestStepInstViewHdlr.show()
TestStepViewHdlr.stepSelected.connect(getTestStepName)
TestStepInstViewHdlr.itemSelectionChanged.connect(TestStepInstViewHdlr.getInstanceName)
TestStepInstViewHdlr.customContextMenuRequested.connect(TestStepInstViewHdlr.onContext)
def getInstanceName(self):
index = self.selectedIndexes()
val = ""
valArray = []
for i in index:
val = i.data()
valArray.append(val)
print(valArray)
return valArray
def onContext(self, position):
instArray = []
constHdlr = const.Constant()
# Create a menu
menu = QtGui.QMenu()
rmvAction = menu.addAction("Remove")
canAction = menu.addAction("Cancel")
action = menu.exec_(self.mapToGlobal(position))
if action == rmvAction:
instArray = self.getInstanceName()
path = constHdlr.TEST_STEP_INSTANCE_PATH + StepName+"\\"
for inst in instArray:
path = path + inst
if os.path.isfile(path):
os.remove(path)
if action == canAction:
pass
Моя модель:
class TestStepInstListModel(QtCore.QAbstractListModel):
def __init__(self, TestSteps = [], parent = None):
QtCore.QAbstractListModel.__init__(self, parent)
self.__TestSteps = TestSteps
def rowCount(self, parent = None):
return len(self.__TestSteps)
def data(self, index, role):
if role == QtCore.Qt.DisplayRole:
row = index.row()
return self.__TestSteps[row]
def flags(self, index):
return QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
def removeRows(self, position, rows, parent = QtCore.QModelIndex()):
self.beginRemoveRows(parent, position, position + rows - 1)
for i in range(rows):
value = self.__TestSteps[position]
self.__TestSteps.remove(value)
self.endRemoveRows()
return True
Спасибо за ваше время :)
Что вы модель? Почему вы не удаляете элементы из модели? Затем модель должна обрабатывать удаление файла. –
Привет, Kuba, я обновил код модели. Моделю удалить файлы и обновить представления, мне нужно проверить. –
Вы пытаетесь сделать что-то, что уже сделано. См. [QDirModel] (http://doc.qt.io/qt-5/qdirmodel.html). –