CMindView.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "CMindView.h"
  2. #include "CRectItem.h"
  3. #include "CLineItem.h"
  4. #include "CTextItem.h"
  5. #include "CMind.h"
  6. #include "CNodeItem.h"
  7. #include <QMenu>
  8. #include <QContextMenuEvent>
  9. #include <QDebug>
  10. CMindView::CMindView(QWidget *parent) : QGraphicsView(new QGraphicsScene(), parent)
  11. {
  12. setRenderHints(QPainter::Antialiasing); // 抗锯齿
  13. m_mind = new CMind(this);
  14. }
  15. void CMindView::connectSignalsAndSlots() { }
  16. CMind *CMindView::mind() const
  17. {
  18. return m_mind;
  19. }
  20. void CMindView::setMind(CMind *mind)
  21. {
  22. m_mind = mind;
  23. refresh();
  24. }
  25. void CMindView::refresh()
  26. {
  27. for (CNodeItem *item : m_itemList) {
  28. scene()->removeItem(item->rectItem());
  29. delete item;
  30. }
  31. m_itemList.clear();
  32. for (CNodeData n : m_mind->nodeList()) {
  33. CNodeItem *item = new CNodeItem(this, n.number);
  34. item->setText(n.name);
  35. m_itemList.append(item);
  36. scene()->addItem(item->rectItem());
  37. connect(item, &CNodeItem::sigAddSubItem, this, &CMindView::addSubNode);
  38. connect(item, &CNodeItem::sigRemoveItem, this, &CMindView::removeNode);
  39. }
  40. }
  41. void CMindView::setALignment(CMindView::Alignment align)
  42. {
  43. m_align = align;
  44. }
  45. void CMindView::addNode(CNodeData n)
  46. {
  47. m_mind->addNode(n);
  48. refresh();
  49. }
  50. void CMindView::removeNode(int number)
  51. {
  52. qDebug() << __FUNCTION__ << __LINE__ << number << endl;
  53. m_mind->removeNode(number);
  54. refresh();
  55. }
  56. void CMindView::addSubNode(int pNumber)
  57. {
  58. qDebug() << __FUNCTION__ << __LINE__ << pNumber << endl;
  59. CNodeData root = m_mind->root();
  60. CNodeData n = CNodeData(root.projectId, root.evalType, m_mind->maxNumber() + 1, pNumber);
  61. addNode(n);
  62. }
  63. void CMindView::testItems()
  64. {
  65. CRectItem *r = new CRectItem(QRectF(0, 0, 100, 100));
  66. scene()->addItem(r);
  67. CLineItem *l = new CLineItem(QPointF(-100, -100), QPointF(50, 50));
  68. scene()->addItem(l);
  69. l->setFlags(QGraphicsItem::ItemIsMovable);
  70. l->setLineType(CLineItem::CurveToLine);
  71. CTextItem *t = new CTextItem("test", QPoint(0, 0));
  72. scene()->addItem(t);
  73. }