LINUX.ORG.RU

[Qt] А beginInsertRows() оказывается protected...

 


0

1

Здравствуйте!

Столкнулся сейчас с такой ситуацией.

Делаю я абстрактную модель данных, унаследованную от QAbstractItemModel. Эту модель я делаю в «два слоя».

Первый слой - это класс с именем TreeModel, унаследованный от QAbstractItemModel. Вот так:

class TreeModel : public QAbstractItemModel
{
 ...
}

Второй слой - это класс с именем KnowTreeModel, унаследованный от TreeModel. Вот так:

class KnowTreeModel : public TreeModel
{
 ...
}

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

В классе KnowTreeModel сосредоточены всякие прочие сложные функции, которые работают с Item-представлением данных, обеспечивают вставку/удаление целых подветок, рекурсивную обработку данных, прочие вещи.

Так вот оказывается, что методы beginInsertRows()/endInsertRow() в QAbstractItemModel являются защищенными (protected), и потому могут вызываться только в TreeModel, а в KnowTreeModel - недоступны.

Для взаимодействия с видом у меня используется KnowTreeModel, и получается, что я не могу воспользоваться методами beginInsertRows()/endInsertRow(). Что делать? Сваливать всё в один класс не хочется. Как разрулить такую ситуацию?


Так вот оказывается, что методы beginInsertRows()/endInsertRow() в QAbstractItemModel являются защищенными (protected), и потому могут вызываться только в TreeModel, а в KnowTreeModel - недоступны


Чё-то ты гонишь, это противоречит ООП. У меня точно такая же связка моделей работает сейчас. Какие конкретно ошибки компилятор выдаёт?

UVV ★★★★★
()
Ответ на: комментарий от UVV

Все, понял свою ошибку. Я напрямую вызывал beginInsertRows() для объекта класса KnowTreeModel. Естественно, такое дело не скомпилируется.

xintrea
() автор топика
Ответ на: комментарий от Dendy

> Кажется догадываюсь: knowTreeModel->beginInsertRows(...)?

Ну да.

xintrea
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.