Files
cbh/ElaWidgetTools/private/ElaGraphicsScenePrivate.cpp
2025-09-20 01:41:33 +08:00

70 lines
2.3 KiB
C++

#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<ElaGraphicsItem *> 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<ElaGraphicsItem *> 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<ElaGraphicsItem *> ElaGraphicsScenePrivate::_serializeItem(int count) {
Q_Q(ElaGraphicsScene);
QList<ElaGraphicsItem *> 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<QString> uidList = itemLinkData.keys();
QList<QVariant> 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);
}
}