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

Другие вопросы по тегам