CNodeItem.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #ifndef CNODEITEM_H
  2. #define CNODEITEM_H
  3. #include <QObject>
  4. #include "CNode.h"
  5. #include <QPoint>
  6. class CRectItem;
  7. class CTextItem;
  8. class CLineItem;
  9. class CNodeItem : public QObject
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit CNodeItem(const CNodeData data, CNodeItem *parent = nullptr);
  14. CNodeData data() const;
  15. void addSubNode(CNodeItem *n);
  16. void removeNode(int number);
  17. CRectItem *rectItem() const;
  18. CTextItem *textItem() const;
  19. CLineItem *lineItem() const;
  20. QPointF pos() const;
  21. void setPos(const QPointF pos);
  22. qreal xMargin() const;
  23. void setXMargin(qreal x);
  24. qreal yMargin() const;
  25. void setYMargin(qreal y);
  26. qreal minWidth() const;
  27. void setMinWidth(qreal w);
  28. qreal maxWidth() const;
  29. void setMaxWidth(qreal w);
  30. qreal minHeight() const;
  31. void setMinHeight(qreal h);
  32. void connectSignalsAndSlots();
  33. void updateItemsGeometry();
  34. int height() const; // 节点的高度
  35. int depth() const; // 节点的深度
  36. int leafs() const; // 叶子节点个数或包含的路径条数
  37. ///
  38. /// \brief sizeOfLevel 以此节点为根节点的子树中,某一层的节点数
  39. /// \param lev 节点层级,当前节点为1,向下递增
  40. /// \return 节点数
  41. ///
  42. int sizeOfLevel(int lev) const;
  43. qreal textWidth() const;
  44. qreal textHeight() const;
  45. qreal borderWidth() const;
  46. qreal borderHeight() const;
  47. qreal hNodeSpace() const;
  48. void setHNodeSpace(qreal h);
  49. qreal vNodeSpace() const;
  50. void setVNodeSpace(qreal v);
  51. /// 子节点的布局高度
  52. qreal childrenHeight() const;
  53. /// 以此节点为根节点的子树的布局高度
  54. qreal treeHeight() const;
  55. ///
  56. /// \brief maxBorderWidthOfLevel 以此节点为根节点的子树中,某一层所有同辈节点中的最大边框宽度
  57. /// \param lev 节点层级,当前节点为1,向下递增
  58. /// \return 边框宽度
  59. ///
  60. qreal maxBorderWidthOfLevel(int lev = 1) const;
  61. void beginEditing();
  62. void endEditing();
  63. CNodeItem *editingNode();
  64. signals:
  65. void sigAddSubItem(int pNumber);
  66. void sigRemoveItem(int number);
  67. void sigTextChanged();
  68. void sigWillBeginEditing();
  69. public slots:
  70. void slotSelect();
  71. void slotSubNode();
  72. void slotRemove();
  73. void slotTextChanged();
  74. void slotWillBeginEditing();
  75. private:
  76. CNodeData m_data;
  77. CRectItem *m_rectItem = nullptr;
  78. CTextItem *m_textItem = nullptr;
  79. CLineItem *m_lineItem = nullptr;
  80. QPointF m_pos;
  81. qreal m_xMargin = 10;
  82. qreal m_yMargin = 5;
  83. qreal m_minWidth = 150;
  84. qreal m_maxWidth = 200;
  85. qreal m_minHeight = 30;
  86. qreal m_hNodeSpace = 80;
  87. qreal m_vNodeSpace = 10;
  88. };
  89. #endif // CNODEITEM_H