Russian Qt Forum
Ноябрь 24, 2024, 01:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: А beginInsertRows() оказывается protected...  (Прочитано 3740 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Октябрь 27, 2010, 13:04 »

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


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

Делаю я абстрактную модель данных, унаследованную от 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(). Что делать? Сваливать всё в один класс не хочется. Как разрулить такую ситуацию?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 27, 2010, 13:25 »

Может ступлю, но что если в TreeModel определить в protected виртуальную функцию beginInsertRows?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Октябрь 27, 2010, 13:35 »

Ололол? protected видны во всех наследниках.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 27, 2010, 13:39 »

Точно. Ступил.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Октябрь 27, 2010, 13:46 »

Ололол? protected видны во всех наследниках.

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

Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.292 секунд. Запросов: 22.