Я пытаюсь создать структуру, которая будет перебираться, и объекты, хранящиеся в ней, будут отрисовываться в порядке слева направо. Но будут контейнеры, которые хранятся рядом с нарисованными объектами. Эти контейнеры я рассматриваю как стеки для рисования, где нарисованные объекты рисуются друг над другом. У меня написан какой-то грубый код psuedo, но я не могу придумать общий интерфейс, чтобы наследовать мой контейнер и рисуемый объект. Моя цель - общий интерфейс между контейнерами и объектами для рисования. Я подумал, что смогу сделать это, просто вставив контейнеры, даже если внутри них будет только один нарисованный объект, но мне кажется, что это просто занимает больше памяти и снижает скорость. Я также не хотел бы избегать приведения объектов для получения правильных вызовов. Может кто-нибудь подсказать, что мне делать, я не самый продвинутый программист, но я стремлюсь к скорости и сокращению кода. Вот что у меня есть (я знаю, что некоторые вызовы интерфейса не соответствуют зависимостям, я просто не знаю, что):
class IDrawable {
protected:
signal_t sig; // this is an enumeration
public:
void paint(QPainter &painter); // This functionality will be defined here since it is painting to a pixmap
virtual void reset() = 0;
virtual void init() = 0; // Setup code will go here
virtual void update(float) = 0;
};
class Signal : public virtual IDrawable {
private:
bool state; // By default this will be false
public:
Signal();
virtual ~Signal();
// Parameters for update is 0 or 1, since the graphic is just toggled on or off
virtual void update(float) = 0; // Drawing happens here. Will draw to pixmap
bool state() {return state;}
};
class Gage : public virtual IDrawable {
private:
float cur_val;
public:
Gage();
virtual ~Gage();
virtual void init() = 0; // Setup code will go here
virtual void update(float) = 0; // Drawing happens here. Will draw to pixmap
};
class TextGage : public virtual Gage {
public:
TextGage();
virtual ~TextGage();
void update(float); // Define update functionality here
};
// a stack can coexist with a Gage object in a container
class DrawableStack : public virtual IDrawable {
private:
QMap<signal_t, IDrawable*> *Stack;
public:
DrawableStack();
virtual ~DrawableStack();
void init() {
Stack = new QMap<signal_t, IDrawable*>();
}
void update(signal_t,float); // Drawing happens here. Will draw to pixmap
void setStack(QMap<IDrawable*> *gageStack) {
Stack = gageStack;
}
void push(IDrawable* node) {
Stack.insert(node->sigType, node);
}
};