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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Публичную переменную в классе не видно извне  (Прочитано 4312 раз)
FireSnake
Гость
« : Март 26, 2011, 01:14 »

Создал свой класс, унаследованные от QSqlTableModel
Код
C++ (Qt)
class MySqlTableModel : public QSqlTableModel
{
 
public:
   MySqlTableModel();
   bool setData(const QModelIndex &index, const QVariant &value, int role);
   QVariant data(const QModelIndex &idx, int role) const;
 
   QStandardItemModel* proxy;
};
 

так вот, из другого класса
Код
C++ (Qt)
model = new MySqlTableModel;
model->proxy;
 
на последнюю строчку кричит class QSqlTableModel has no member named ‘proxy’, не понятно почему он берет его из QSqlTableModel
что я делаю не так?
Записан
Fat-Zer
Гость
« Ответ #1 : Март 26, 2011, 01:45 »

Скорей всего model объявлен у вас как "QSqlTableModel *model;"

про то, что так не надо делать я промолчу...
Записан
FireSnake
Гость
« Ответ #2 : Март 26, 2011, 11:57 »

А почему так делать нельзя? В учебниках сказано что не динамически создавать только объекты находящиеся на вершине иерархии. В данном случае модель не находится на вершине иерархии. Подскажите пожалуйста как нужно правильно делать?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #3 : Март 26, 2011, 12:39 »

Дело не в динамическом создании в том, что проксей управляет другой класс. Инкапсуляции нет.
А вообще вроде должно быть видно.
Записан
FireSnake
Гость
« Ответ #4 : Март 26, 2011, 12:57 »

так я по этому и запарился, что аналогичный способ с наследованием других классов - работал, все было видно, а вот с QSqlTableModel что то не получается. Если создать наследуемый класс от моего же, то все становится видно, но это как то корявенько
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Март 26, 2011, 16:54 »

FireSnake пересобери весь проект, с полной очисткой.
Всё должно быть видно.
Записан

Юра.
FireSnake
Гость
« Ответ #6 : Март 26, 2011, 17:15 »

попробовал, но не помогло(
Записан
brankovic
Гость
« Ответ #7 : Март 26, 2011, 18:05 »

Код
C++ (Qt)
model = new MySqlTableModel;
model->proxy;
 
что я делаю не так?

А какого типа переменная model? MySqlTableModel * или SqlTableModel *?
Записан
lucky
Гость
« Ответ #8 : Март 27, 2011, 11:28 »

Скорее всего указатель model действительно типа QSqlTableModel*. Если написать так:
Код:
QSqlTableModel *model = new MySqlTableModel;
model->proxy;
Компилятор посмотрит на тип указателя model, а не на адрес который в нем хранится, и будет пытаться достучаться к указателю proxy, но так как его нет в классе QSqlTableModel будет выведена ошибка. Придется сделать так:
Код:
MySqlTableModel *model = new MySqlTableModel;

P.S. Делать публичные поля класса - не красиво.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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