मैं क्यूटी QGraphicsScene
कक्षा का उपयोग कर रहा हूं, QGraphicsRectItem
, QGraphicsLineItem
, आदि जैसी पूर्व परिभाषित वस्तुओं को जोड़ रहा हूं और मैं दृश्य सामग्री को डिस्क पर क्रमबद्ध करना चाहता हूं। हालांकि, बेस QGraphicsItem
वर्ग (जो अन्य आइटम मैं उपयोग करता हूं) से क्रमबद्धता का समर्थन नहीं करता है इसलिए मुझे अपना कोड रोल करने की आवश्यकता है। समस्या यह है कि इन वस्तुओं के इस्तेमाल के सभी एक आधार QGraphicsItem
सूचक के माध्यम से है, इसलिए क्रमबद्धता कोड मैं भयानक है:QGraphicsScene सामग्री को क्रमबद्ध करना
QGraphicsScene* scene = new QGraphicsScene;
scene->addRect(QRectF(0, 0, 100, 100));
scene->addLine(QLineF(0, 0, 100, 100));
...
QList<QGraphicsItem*> list = scene->items();
foreach (QGraphicsItem* item, items)
{
if (item->type() == QGraphicsRectItem::Type)
{
QGraphicsRectItem* rect = qgraphicsitem_cast<QGraphicsRectItem*>(item);
// Access QGraphicsRectItem members here
}
else if (item->type() == QGraphicsLineItem::Type)
{
QGraphicsLineItem* line = qgraphicsitem_cast<QGraphicsLineItem*>(item);
// Access QGraphicsLineItem members here
}
...
}
यह अच्छा कोड IMHO नहीं है। तो, बजाय मैं इस तरह एक एबीसी वर्ग बना सकते हैं:
class Item
{
public:
virtual void serialize(QDataStream& strm, int version) = 0;
};
class Rect : public QGraphicsRectItem, public Item
{
public:
void serialize(QDataStream& strm, int version)
{
// Serialize this object
}
...
};
मैं तो रेक्ट वस्तुओं QGraphicsScene::addItem(new Rect(,,,));
का उपयोग कर जोड़ सकते हैं लेकिन यह वास्तव में मुझे मदद नहीं करता है के रूप में निम्नलिखित दुर्घटना होगा:
QList<QGraphicsItem*> list = scene->items();
foreach (QGraphicsItem* item, items)
{
Item* myitem = reinterpret_class<Item*>(item);
myitem->serialize(...) // FAIL
}
किसी भी तरह से मैं यह काम कर सकता हूं?
'myitem-> serialize()' क्रैश क्यों करता है।मैं इसे नहीं देख रहा हूँ? –