chengxr 1 year ago
parent
commit
0d1209f4be
3 changed files with 35 additions and 0 deletions
  1. 16 0
      QFD/CCanvas/CNodeItem.cpp
  2. 6 0
      QFD/CCanvas/CNodeItem.h
  3. 13 0
      QFD/CCanvas/CTextItem.cpp

+ 16 - 0
QFD/CCanvas/CNodeItem.cpp

@@ -13,6 +13,7 @@ CNodeItem::CNodeItem(const CNodeData data, CNodeItem *parent) : QObject(parent),
 {
     m_rectItem = new CRectItem();
     m_textItem = new CTextItem(data.name, m_rectItem);
+    m_textItem->document()->setDocumentMargin(20);
     m_lineItem = new CLineItem(m_rectItem);
     updateItemsGeometry();
     connectSignalsAndSlots();
@@ -110,6 +111,16 @@ void CNodeItem::setMinWidth(qreal w)
     updateItemsGeometry();
 }
 
+qreal CNodeItem::maxWidth() const
+{
+    return m_maxWidth;
+}
+
+void CNodeItem::setMaxWidth(qreal w)
+{
+    m_maxWidth = w;
+}
+
 qreal CNodeItem::minHeight() const
 {
     return m_minHeight;
@@ -254,6 +265,11 @@ qreal CNodeItem::maxBorderWidthOfLevel(int lev) const
     return w;
 }
 
+void CNodeItem::beginEditing()
+{
+    m_textItem->beginEditing();
+}
+
 void CNodeItem::endEditing()
 {
     m_textItem->endEditing();

+ 6 - 0
QFD/CCanvas/CNodeItem.h

@@ -38,6 +38,9 @@ public:
     qreal minWidth() const;
     void setMinWidth(qreal w);
 
+    qreal maxWidth() const;
+    void setMaxWidth(qreal w);
+
     qreal minHeight() const;
     void setMinHeight(qreal h);
 
@@ -77,6 +80,8 @@ public:
     ///
     qreal maxBorderWidthOfLevel(int lev = 1) const;
 
+    void beginEditing();
+
     void endEditing();
 
     bool isEditing() const;
@@ -105,6 +110,7 @@ private:
     qreal m_yMargin = 5;
 
     qreal m_minWidth  = 100;
+    qreal m_maxWidth  = 200;
     qreal m_minHeight = 30;
 };
 

+ 13 - 0
QFD/CCanvas/CTextItem.cpp

@@ -2,6 +2,7 @@
 
 #include <QKeyEvent>
 #include <QGraphicsSceneMouseEvent>
+#include <QTextDocument>
 
 #include <QDebug>
 
@@ -63,3 +64,15 @@ void CTextItem::setAllowEdit(bool a)
     m_allowEdit = a;
     endEditing();
 }
+
+QSizeF CTextItem::textSize(const QString t)
+{
+    static CTextItem *i = nullptr;
+    if (i == nullptr) {
+        i = new CTextItem(nullptr);
+    }
+
+    i->document()->setPlainText(t);
+
+    return i->document()->size();
+}