Каковы преимущества QAbstractItemModel по сравнению с QStandardItemModel?

Я хочу хранить пользовательские данные, используя модель. Для этого я немного смущен тем, какую модель элемента выбрать для подкласса. Мне нужно некоторое разъяснение, какая модель лучше всего подходит для подкласса? А также мне нужны преимущества QAbstractItemModel по сравнению с QStandardItemModel?

Спасибо!


person Dev    schedule 09.05.2012    source источник


Ответы (1)


Это зависит от ваших потребностей. Используйте QStandardItemModel, если вы просто хотите хранить пользовательские данные и не хотите писать собственную логику модели. Это общий, вы можете использовать его для пользовательских данных без подкласса.

С другой стороны, если вы хотите написать собственную логику модели, выберите QAbstractItemModel. Это абстрактный класс. Это означает, что у него нет реализованного поведения, это просто «интерфейс». Он сообщает вам, какие методы должна реализовать ваша модель, поэтому его можно использовать как любой другой класс ItemModel в Qt.

person Kousalik    schedule 09.05.2012
comment
Спасибо кусалик! Любые другие существенные различия? - person Dev; 09.05.2012
comment
Нет, QStandardItemModel является реализацией (подклассом) QAbstractItemModel. - person Kousalik; 09.05.2012
comment
@Kousalik, не могли бы вы уточнить, что вы подразумеваете под «логикой модели»? Какую конкретную логику модели реализует QStandardItemModel, чего не делает AbstractItemModel? Например, если вы хотите, чтобы ваша модель была редактируемой, проще ли использовать StandardItemModel? Мне просто любопытно, потому что я использую QAbstractItemModel и думаю о том, почему я должен или не должен переключаться на QStandardItemModel. - person eric; 01.12.2014
comment
Как вы использовали абстрактную модель? Его нельзя просто использовать. Цитируя его документы: класс QAbstractItemModel определяет стандартный интерфейс, который должны использовать модели элементов, чтобы иметь возможность взаимодействовать с другими компонентами в архитектуре модель/представление. Он не должен создаваться напрямую. Вместо этого вы должны создать подкласс для создания новых моделей. Конец цитаты. Разница в том, что в стандартной модели уже реализовано некоторое базовое поведение для отображения стандартных данных. Для более сложных структур, фильтрации, объединения или чего-то еще, что вам нужно реализовать свою собственную логику и, следовательно, перейти к подклассам. - person Kousalik; 03.12.2014
comment
Kousalik Я использую abstractitemmodel для древовидных представлений, поэтому я думаю, что понимаю, что вы имели в виду, но кто-то, задающий этот вопрос, может не понять, что вы подразумеваете под «логикой модели», которая формирует концептуальную точку опоры вашего ответа. - person eric; 04.12.2014