99 lines
2.5 KiB
C++
99 lines
2.5 KiB
C++
|
|
#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();
|
||
|
|
}
|