У меня есть пользовательская структура данных, которую я хочу отобразить в приложении PyQt, используя QTableView. Я использую подкласс QAbstractTableModel для связи с данными. Сама структура данных находится в отдельном модуле и ничего не знает о PyQt.
Отображение и редактирование данных с помощью QTableView работает, но теперь я хотел бы отсортировать данные, а затем обновить модель и представление.
После прочтения документации Qt для QAbstractTableModel и его предка QAbstractItemModel, мой первый подход состоял в том, чтобы попробовать это:
class MyModel(QtCore.QAbstractTableModel):
__init__(self, data_structure):
super().__init__()
self.data_structure = data_structure
# ...
def sort_function(self):
self.layoutAboutToBeChanged.emit()
# custom_sort() is built into the data structure
self.data_structure.custom_sort()
self.layoutChanged.emit()
Однако, это не может обновить представление. Я также пытался подать сигнал dataChanged на все данные, используемые моделью, но при этом также не удалось обновить представление.
Я провел дополнительное исследование. Если я правильно понимаю, проблема в том, что QPersistentModelIndexes в модели не обновляются, и решением было бы как-то вручную обновить их.
Есть ли лучший способ сделать это? Если нет, то как мне их обновить (желательно без необходимости писать новую функцию сортировки, которая отслеживает каждое изменение индекса)?