AbstactTableModels, которые работают на одном источнике данных
Допустим, я хочу реализовать библиотечный инструмент для управления различными типами медиа. Поэтому у меня есть базовый класс Medium и производные классы, например, Book и DVD, которые имеют дополнительные свойства.
Моя проблема в том, что я не могу понять, как правильно проектировать модели. Я хочу иметь возможность показывать мультимедийные данные в одном TableView с основными свойствами из класса Medium, а также только DVD-диски в другом TableView с его специальными свойствами из производного класса. И если я удаляю DVD, я хочу, чтобы он также был удален в таблице Media. Поэтому я подумал, что они должны иметь один и тот же источник данных.
Каков наилучший способ достичь этого? Не найдено ни одного примера, иллюстрирующего эту проблему.
2 ответа
Это может быть простая модель, которая включает в себя все столбцы из всех трех источников - средний, DVD, книга.
В одном представлении вы делаете только столбцы "среднего" для показа, другие скрыты, в другом представлении вы можете отображать только столбцы "dvd". Но объект модели - это всего лишь один объект, применяемый в качестве источника ко всем представлениям.
Если из модели будет удален один ряд, все представления будут обновлены соответствующим образом. То же самое с "добавить".
Реализовать собственный элемент дерева (посмотрите, например, http://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html)
добавьте что-то вроде enum с типами, добавьте методы для TreeItem для работы с типами, затем используйте модель прокси (подробный пример: http://doc.qt.io/qt-5/qsortfilterproxymodel.html) для сортировки данных.
лайк:
enum Property {Book, DVD, Other };
class TreeItem
{
...
public:
Property GetProperty() const;
void setProperty(Property iProp);
...
};