Russian Qt Forum

Qt => Вопросы новичков => Тема начата: FireSnake от Март 26, 2011, 01:14



Название: Публичную переменную в классе не видно извне
Отправлено: 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
что я делаю не так?


Название: Re: Публичную переменную в классе не видно извне
Отправлено: Fat-Zer от Март 26, 2011, 01:45
Скорей всего model объявлен у вас как "QSqlTableModel *model;"

про то, что так не надо делать я промолчу...


Название: Re: Публичную переменную в классе не видно извне
Отправлено: FireSnake от Март 26, 2011, 11:57
А почему так делать нельзя? В учебниках сказано что не динамически создавать только объекты находящиеся на вершине иерархии. В данном случае модель не находится на вершине иерархии. Подскажите пожалуйста как нужно правильно делать?


Название: Re: Публичную переменную в классе не видно извне
Отправлено: Авварон от Март 26, 2011, 12:39
Дело не в динамическом создании в том, что проксей управляет другой класс. Инкапсуляции нет.
А вообще вроде должно быть видно.


Название: Re: Публичную переменную в классе не видно извне
Отправлено: FireSnake от Март 26, 2011, 12:57
так я по этому и запарился, что аналогичный способ с наследованием других классов - работал, все было видно, а вот с QSqlTableModel что то не получается. Если создать наследуемый класс от моего же, то все становится видно, но это как то корявенько


Название: Re: Публичную переменную в классе не видно извне
Отправлено: lit-uriy от Март 26, 2011, 16:54
FireSnake пересобери весь проект, с полной очисткой.
Всё должно быть видно.


Название: Re: Публичную переменную в классе не видно извне
Отправлено: FireSnake от Март 26, 2011, 17:15
попробовал, но не помогло(


Название: Re: Публичную переменную в классе не видно извне
Отправлено: brankovic от Март 26, 2011, 18:05
Код
C++ (Qt)
model = new MySqlTableModel;
model->proxy;
 
что я делаю не так?

А какого типа переменная model? MySqlTableModel * или SqlTableModel *?


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

P.S. Делать публичные поля класса - не красиво.