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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Один интерфейс для нескольких классов  (Прочитано 3814 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Май 06, 2011, 12:36 »

Использую на QGraphicsScene множество item-ов и несколько widget-ов.
Все item-ы наследуются от класса QRailItem
Код:
class QRailItem : public QObject, public QGraphicsItem
{
    Q_OBJECT
    Q_INTERFACES (QGraphicsItem)

protected:

    QFont           ffont;
    bool            fupdating;
    QString         fname;
    QRectF          fboundRect;
    TObjectType     fobjectType;
    quint32 id;
...
};

Как мне сделать грамотно интерфейс, в который бы вынести все эти поля из базового класса, что бы они так же были и в классе QGraphicsProxyWidget?
Простым дублированием не охота делать.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Май 06, 2011, 13:14 »

вот набросал диаграмму того что хочу получить
Записан
alexman
Гость
« Ответ #2 : Май 06, 2011, 16:46 »

Ну можно сделать класс-наследник от QGraphicsItem, поместить туда поля, ну а далее наследоваться от этого класса!
Записан
alexman
Гость
« Ответ #3 : Май 06, 2011, 16:47 »

Кстати есть QGraphicsObject.
Записан
blood_shadow
Гость
« Ответ #4 : Май 06, 2011, 18:03 »

создать класс данных:
Код
C++ (Qt)
class Data
{
   QString name;
   quint32 id;
   ...
}
 

и создавать в каждом классе(где необходимо) экземляр такого класса данных

Код
C++ (Qt)
class QRailItem : public QObject, public QGraphicsItem
{
   Q_OBJECT
   Q_INTERFACES (QGraphicsItem)
 
protected:
 
   Data data;
...
};
 
Записан
Akon
Гость
« Ответ #5 : Май 06, 2011, 19:11 »

Создать класс данных (см. пред. пост) и наследоваться от него.
Записан
Zartul
Гость
« Ответ #6 : Июнь 02, 2011, 21:05 »

Можно сделать шаблонный класс-прокладку, с передачей в качестве параметра родителя класса

Код
C++ (Qt)
template< class Parent >
class Data : public Parent
{
public:
 Data();
 
protected:
  QFont           ffont;
  bool            fupdating;
  QString         fname;
  QRectF          fboundRect;
  TObjectType     fobjectType;
  quint32 id;
}

ну и вставлять эту прокладку между последним классом и его родителем

Код
C++ (Qt)
class Base;
 
class Child : public Data< Base >
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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