QTreeView StandardItem.insertRow(0, new_item) вставляет себя вместо new_item?
Я хочу вставить новый элемент в свое древовидное представление в строке 0 дочернего элемента. Код казался довольно простым, но я думаю, что столкнулся с ошибкой? Я упростил задачу, чтобы избежать лишнего кода. Я что-то делаю не так?
Чтобы было ясно, если я вызываю insertRow() в самом StandardItemModel ... он действительно работает. Тем не менее, он мне нужен для работы над подпунктом модели.
Версия QT: 6.0.0 Версия PySide: 6.0.0 ОС: Ubuntu 20.10 (KDE)
class MyTreeView(QTreeView):
def __init__(self, parent):
super().__init__(parent)
model = MyModel()
self.setModel(model)
class MyModel(QStandardItemModel):
def __init__(self):
super().__init__()
self.root_item = self.invisibleRootItem()
self.top_level = QStandardItem("Top level")
self.root_item.appendRow(self.top_level)
self.top_level.appendRow(QStandardItem('Appended item'))
self.top_level.insertRow(0, QStandardItem('Inserted item'))
Теперь я ожидал такого результата:
- Top level
- Inserted item
- Appended item
Но вот результат, который я получаю:
- Top level
- Top level
- Appended item
1 ответ
Кажется, что когда вы вставляете элемент напрямую, он выходит за рамки. Решением для этого примера было бы сначала назначить его самому себе.
Я все еще предполагаю, что это ошибка, поскольку appendRow() имитирует такое поведение.
class MyTreeView(QTreeView):
def __init__(self, parent):
super().__init__(parent)
model = MyModel()
self.setModel(model)
class MyModel(QStandardItemModel):
def __init__(self):
super().__init__()
self.root_item = self.invisibleRootItem()
self.top_level = QStandardItem("Top level")
self.root_item.appendRow(self.top_level)
self.top_level.appendRow(QStandardItem('Appended item'))
# CHANGE START
self.insert_item = QStandardItem('Inserted item')
self.top_level.insertRow(0, self.insert_item)
# CHANGE END