CNodeItem.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 minHeight() const;
  29. void setMinHeight(qreal h);
  30. void connectSignalsAndSlots();
  31. void updateItemsGeometry();
  32. int height() const; // 节点的高度
  33. int depth() const; // 节点的深度
  34. int leafs() const; // 叶子节点个数或包含的路径条数
  35. ///
  36. /// \brief sizeOfLevel 以此节点为根节点的子树中,某一层的节点数
  37. /// \param lev 节点层级,当前节点为1,向下递增
  38. /// \return 节点数
  39. ///
  40. int sizeOfLevel(int lev) const;
  41. qreal textWidth() const;
  42. qreal textHeight() const;
  43. qreal borderWidth() const;
  44. qreal borderHeight() const;
  45. /// 子节点的布局高度
  46. qreal childrenHeight() const;
  47. /// 以此节点为根节点的子树的布局高度
  48. qreal treeHeight() const;
  49. ///
  50. /// \brief maxBorderWidthOfLevel 以此节点为根节点的子树中,某一层所有同辈节点中的最大边框宽度
  51. /// \param lev 节点层级,当前节点为1,向下递增
  52. /// \return 边框宽度
  53. ///
  54. qreal maxBorderWidthOfLevel(int lev = 1) const;
  55. void endEditing();
  56. bool isEditing() const;
  57. signals:
  58. void sigAddSubItem(int pNumber);
  59. void sigRemoveItem(int number);
  60. void sigTextChanged();
  61. public slots:
  62. void slotSelect();
  63. void slotSubNode();
  64. void slotRemove();
  65. void slotTextChanged();
  66. private:
  67. CNodeData m_data;
  68. CRectItem *m_rectItem = nullptr;
  69. CTextItem *m_textItem = nullptr;
  70. CLineItem *m_lineItem = nullptr;
  71. QPointF m_pos;
  72. qreal m_xMargin = 10;
  73. qreal m_yMargin = 5;
  74. qreal m_minWidth = 100;
  75. qreal m_minHeight = 30;
  76. };
  77. #endif // CNODEITEM_H