DiagramDesigner/diagramCavas/source/graphicsItem/functionModelItem/electricFunctionModelItemTe...

99 lines
2.5 KiB
C++
Raw Normal View History

2026-03-27 14:32:11 +08:00
#include "graphicsItem/functionModelItem/electricFunctionModelItemText.h"
#include "graphicsDataModel/fixedPortsModel.h"
#include "baseProperty.h"
#include <QPainter>
#include <QStyleOption>
#include <QGraphicsScene>
#include <QGraphicsView>
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<GraphicProperty*>(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<QGraphicsItem>::setBoundingRect(m_boundingRect);
// 更新控制点
updateHandles();
}