#include "graphicsItem/functionModelItem/electricFunctionModelItemText.h" #include "graphicsDataModel/fixedPortsModel.h" #include "baseProperty.h" #include #include #include #include ElectricFunctionModelItemText::ElectricFunctionModelItemText(QGraphicsItem *parent) : GraphicsFunctionModelItem(parent) { initial(); } ElectricFunctionModelItemText::~ElectricFunctionModelItemText() { } void ElectricFunctionModelItemText::setText(const QString& text) { if (m_text != text) { m_text = text; updateBoundingRect(); update(); // 触发重绘 // 标记为已修改 setItemChanged(true); auto pPro = dynamic_cast(getProperty()); if(pPro){ pPro->setContent(text); //同步修改属性值 } } } void ElectricFunctionModelItemText::setTextColor(const QColor& color) { m_textColor = color; } void ElectricFunctionModelItemText::setFontSize(int n) { if(n>0 && n <100){ m_font.setPointSize(n); updateBoundingRect(); } } void ElectricFunctionModelItemText::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { // 1. 绘制背景 if (m_backgroundVisible) { painter->setBrush(m_backgroundColor); painter->setPen(Qt::NoPen); painter->drawRect(m_boundingRect); } // 2. 绘制文本 painter->setFont(m_font); painter->setPen(m_textColor); QRectF textRect = m_boundingRect.adjusted(2, 2, -2, -2); painter->drawText(textRect, Qt::AlignCenter, m_text); // 3. 调用基类绘制(选中框、控制点) if (option->state & QStyle::State_Selected) //是选中状态,绘制选中框 { renderSelectBackground(painter); } GraphicsFunctionModelItem::paint(painter,option,widget); } void ElectricFunctionModelItemText::initial() { setHandleIfShow(H_textCaption,false); setHandleVisible(false); setFunctionHandleIfShow(false); setFunctionHandleEnaable(false); m_boundingRect = QRectF(0, 0, 50, 20); //初始化为定值 } void ElectricFunctionModelItemText::updateBoundingRect() { if (m_text.isEmpty()) { m_boundingRect = QRectF(0, 0, 50, 20); } else { QFontMetricsF fm(m_font); QRectF textRect = fm.boundingRect(m_text); m_boundingRect = textRect.adjusted(-4, -4, 4, 4); } // 更新基类边界 AbstractShapeType::setBoundingRect(m_boundingRect); // 更新控制点 updateHandles(); }