Russian Qt Forum

Программирование => С/C++ => Тема начата: Fregloin от Май 06, 2011, 12:36



Название: Один интерфейс для нескольких классов
Отправлено: Fregloin от Май 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?
Простым дублированием не охота делать.


Название: Re: Один интерфейс для нескольких классов
Отправлено: Fregloin от Май 06, 2011, 13:14
вот набросал диаграмму того что хочу получить


Название: Re: Один интерфейс для нескольких классов
Отправлено: alexman от Май 06, 2011, 16:46
Ну можно сделать класс-наследник от QGraphicsItem, поместить туда поля, ну а далее наследоваться от этого класса!


Название: Re: Один интерфейс для нескольких классов
Отправлено: alexman от Май 06, 2011, 16:47
Кстати есть QGraphicsObject.


Название: Re: Один интерфейс для нескольких классов
Отправлено: blood_shadow от Май 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;
...
};
 


Название: Re: Один интерфейс для нескольких классов
Отправлено: Akon от Май 06, 2011, 19:11
Создать класс данных (см. пред. пост) и наследоваться от него.


Название: Re: Один интерфейс для нескольких классов
Отправлено: Zartul от Июнь 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 >