A
@witte:
Item ist als Oberklasse gedacht und wird nicht wirklich instanziiert, sollte eigentlich abstrakt sein. Es bildet aber die Baumstruktur meiner Zeichnung ab, d.h. ein Item kann mehrere Kinder enthalten (s. Member mChildren : QList<Item*>). In Wahrheit ist die Hierarchie natürlich tiefer, also z.B.:
Item
|____ GroupItem
| |
| [...]
|
|____ DrawableItem
|__________Polygon
|__________Circle
[...]
Also GroupItem kann eben mehrere DrawableItems zusammenfassen und implementiert noch evt. Properties einer Gruppe (Mittelpunkt, BoundingBox etc.)
class GroupItem : public Item
{
public:
GroupItem(Item *parent = 0);
QPointF center() const;
QRectF boundingRect() const;
[...]
};
Beim Brückenmuster (swoeit ich das kenne, geht es ja um die Trennung von Abstraktion und Implementierung, aber dazu müsste ich doch auch zwei Vererbungshierarchien implementieren, etwa so, oder?
Item <>---------------------------- ItemView
| |
|____DrawableItem |__ DrawableItemView
|_____________ Circle |_________________ CircleView
|_____________ Polygon |_________________ PolygonView
[...] [...]
mit einem Member in der Item-Klasse:
class Item
{
public:
virtual void render(QPainter *painter) const {
mView->render(painter);
}
[...]
private:
ItemView *mView;
};
Das wäre ja im Prinzip genau das, was ich mit Replizieren gemeint hatte...
@nogu:
Ich hab mich noch nicht tiefer mit Model/View-Framework von Qt beschäftigt, anhand der Bsp. aber hatte ich den Eindruck, dass es auf bestimmte Models/Views (Tabellen, Trees etc.) abgestimmt ist (hab mich jetzt aber nich wirklich eingehender damit beschäftigt), außerde, wollte ich Overheads vermeiden, da das Rendering der Items möglichst schnell sein muss...