C++ (Qt)struct CGraphArc { ... TArcType m_type; // тип зависимости CGraphNode * m_node; // второй нод (первый - владелец этой CGraphArc) CArcData * m_data; // ??? данные дуги/связки};
// а это копии:A1 {name = "Item.A", m_parent = NULL, childs = {&B,&C} };B1 {name = "Item.B", m_parent = &A, childs = {NULL} };C1 {name = "Item.C", m_parent = &A, childs = {NULL} };
{ { A, A1 }, { B, B1 }, { C, C1 } }
C++ (Qt)void SetLinks( const Hash & hash ){ for (iter it = hash.begin(); it != hash.end(); ++it) { Node * src = it.key(); Node * dst = it.value(); dst->m_parent = hash.value(src->m_parent); // пробуем установить копию парента if (!dst->m_parent) dst->m_parent = src->m_parent; // иначе копия получает того же парента что и оригинал if (dst->m_parent) dst->m_parent->AddChild(dst); // добавляем чайлда }}
C++ (Qt)СTreeItem * dst = src->Clone(parent);
QHash<BaseClass *, CGraphNode> theReferenceHash;
QHash<void *, CGraphNode> theReferenceHash; // ой как некрасиво :-)
C++ (Qt)struct CGraphArc {... TArcType mType; Node * mNode;}; struct Node { ... QVector<CGraphArc> mInput, mOutput; };