Как использовать QAbstractItemModel?

Мне нужно использовать QAbstractItemModel с QTreeView в PyQt.

В методе dropMimeData я хочу удалить исходную строку (если это определенный MIME_TYPE.) Как получить строку и parentIndex исходного кода? Или мне нужно сделать это каким-то другим способом.

def dropMimeData(self, mimedata, action, row, column, parentIndex):

1 ответ

Мои комментарии работали слишком долго, поэтому я решил начать ответ с информации.

QAbstractItemModel - это базовый класс, который нужен для случаев, когда вам нужен индивидуальный способ моделирования ваших данных, который не соответствует ни одному из существующих, например, источник данных и способ их представления в виде элементов. Он не готов к использованию "из коробки", так как для этого необходимо реализовать ряд методов. Вы, вероятно, не должны начинать с этого класса, если у вас нет веских причин для этого, так как он требует гораздо больше работы, чтобы начать работу.

Для того, чтобы просто выполнить перетаскивание и использовать основные элементы, QStandardItemModel должен быть готов к использованию. Вы просто создаете QStandardItems и заполняете модель. Для перетаскивания вы бы делили модель на подклассы и просто реализовывали соответствующие методы перетаскивания *Event и drop*Event в соответствии с вашими потребностями.

Использование QStandardItemModel + QTreeView позволяет вам иметь несколько представлений, использующих одну и ту же модель и одновременно визуализирующих ее по-разному. Но, учитывая, что вы сказали, что хотите сохранить два разных набора независимых данных, и что вы новичок в Qt, я настоятельно рекомендую вам просто использовать два QTreeWidget. QTreeWidget - это всеобъемлющий пакет вида и модели. Это будет намного проще для вас сейчас.

Используя QTreeWidget, вы делите их на подклассы и реализуете необходимые события перетаскивания, как и в QTreeView, но вам больше не нужно беспокоиться о моделях отдельно.

Вот ссылка на сообщение о перетаскивании с помощью QTreeWidget: http://www.qtcentre.org/threads/5910-QTreeWidget-Drag-and-drop
Они упоминают рекомендуемые методы для реализации, а также то, что вы должны сделать с подклассом QTreeWidgetItem, чтобы определить mimeData.

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