Здравствуйте!
Столкнулся сейчас с такой ситуацией.
Делаю я абстрактную модель данных, унаследованную от QAbstractItemModel. Эту модель я делаю в "два слоя".
Первый слой - это класс с именем TreeModel, унаследованный от QAbstractItemModel. Вот так:
class TreeModel : public QAbstractItemModel
{
...
}
Второй слой - это класс с именем KnowTreeMode, унаследованный от TreeModel. Вот так:
class KnowTreeModel : public TreeModel
{
...
}
В классе TreeModel сосредоточены все переопределяемые функции, которые требуется переопределить для работы с видом, и ничего больше.
В классе KnowTreeModel сосредоточены всякие прочие сложные функции, которые работают с Item-представлением данных, обеспечивают вставку/удаление целых подветок, рекурсивную обработку данных, прочие вещи.
Так вот оказывается, что методы beginInsertRows()/endInsertRow() в QAbstractItemModel являются защищенными (protected), и потому могут вызываться только в TreeModel, а в KnowTreeModel - недоступны.
Для взаимодействия с видом у меня используется KnowTreeModel, и получается, что я не могу воспользоваться методами beginInsertRows()/endInsertRow(). Что делать? Сваливать всё в один класс не хочется. Как разрулить такую ситуацию?