#include "ElaGraphicsScenePrivate.h" #include "ElaGraphicsItem.h" #include "ElaGraphicsLineItem.h" #include "ElaGraphicsScene.h" ElaGraphicsScenePrivate::ElaGraphicsScenePrivate(QObject* parent) : QObject(parent) { } ElaGraphicsScenePrivate::~ElaGraphicsScenePrivate() { } QDataStream& operator<<(QDataStream& stream, const ElaGraphicsScenePrivate* data) { QStringList keyList = data->_items.keys(); QList itemList = data->_items.values(); stream << keyList; for (int i = 0; i < keyList.count(); i++) { stream << itemList[i]; } stream << data->_itemsLink; return stream; } QDataStream& operator>>(QDataStream& stream, ElaGraphicsScenePrivate* data) { QStringList keyList; stream >> keyList; QList itemList = data->_serializeItem(keyList.count()); for (int i = 0; i < keyList.count(); i++) { stream >> itemList[i]; } for (int i = 0; i < keyList.count(); i++) { data->_items.insert(keyList[i], itemList[i]); } stream >> data->_itemsLink; data->_deserializeLink(); return stream; } QList ElaGraphicsScenePrivate::_serializeItem(int count) { Q_Q(ElaGraphicsScene); QList itemList; for (int i = 0; i < count; i++) { ElaGraphicsItem* item = new ElaGraphicsItem(); item->setParent(q); itemList.append(item); q->QGraphicsScene::addItem(item); _currentZ++; } return itemList; } void ElaGraphicsScenePrivate::_removeLinkLineItem() { Q_Q(ElaGraphicsScene); if (_linkLineItem) { q->QGraphicsScene::removeItem(_linkLineItem); delete _linkLineItem; _linkLineItem = nullptr; } } void ElaGraphicsScenePrivate::_deserializeLink() { Q_Q(ElaGraphicsScene); for (int i = 0; i < _itemsLink.count(); i++) { QVariantMap itemLinkData = _itemsLink[i]; QList uidList = itemLinkData.keys(); QList portList = itemLinkData.values(); ElaGraphicsLineItem* lineItem = new ElaGraphicsLineItem(_items.value(uidList[0]), _items.value(uidList[1]), portList[0].toInt(), portList[1].toInt()); q->QGraphicsScene::addItem(lineItem); _lineItemsList.append(lineItem); } }