#include "graphicsItem/functionModelItem/electricFunctionModelSvgItemPT.h" #include #include #include #include #include ElectricFunctionModelSvgItemPT::ElectricFunctionModelSvgItemPT(const QRect &rect, QGraphicsItem *parent) : ElectricFunctionModelSvgItem(rect,parent) { initial(); } ElectricFunctionModelSvgItemPT::ElectricFunctionModelSvgItemPT(const ElectricFunctionModelSvgItemPT& obj) : ElectricFunctionModelSvgItem(obj) { initial(); _itemType = obj._itemType; } ElectricFunctionModelSvgItemPT::~ElectricFunctionModelSvgItemPT() { } ElectricFunctionModelSvgItemPT* ElectricFunctionModelSvgItemPT::clone() const { return new ElectricFunctionModelSvgItemPT(*this); } void ElectricFunctionModelSvgItemPT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { if(_curMonitorStateEnable){ painter->setRenderHint(QPainter::Antialiasing); QSize imageSize = m_boundingRect.size().toSize(); if (imageSize.isEmpty()) return; // 1. 渲染SVG到图像 QImage sourceImage(imageSize, QImage::Format_ARGB32_Premultiplied); sourceImage.fill(Qt::transparent); QPainter sourcePainter(&sourceImage); sourcePainter.setRenderHint(QPainter::Antialiasing); m_pCustomRender->render(&sourcePainter, QRectF(0, 0, imageSize.width(), imageSize.height())); sourcePainter.end(); // 2. 直接使用合成模式改变颜色(更高效) QImage resultImage(imageSize, QImage::Format_ARGB32_Premultiplied); resultImage.fill(Qt::transparent); QPainter resultPainter(&resultImage); // 先绘制原始SVG(保留透明度) resultPainter.drawImage(0, 0, sourceImage); // 然后对非透明区域应用颜色叠加 resultPainter.setCompositionMode(QPainter::CompositionMode_SourceIn); resultPainter.fillRect(resultImage.rect(), QColor(_curMonitorStateColor)); resultPainter.end(); // 3. 最终绘制 painter->drawImage(m_boundingRect, resultImage); } else{ if (!m_pRender || !m_pRender->isValid()) { painter->setBrush(QBrush(QColor(230, 230, 230))); // 浅灰白,未设置图片 // 2. 设置虚线画笔 QPen pen(QColor(160, 160, 160)); pen.setStyle(Qt::DashLine); pen.setWidth(1); painter->setPen(pen); // 3. 绘制基础矩形 painter->drawRoundedRect(boundingRect(), 2, 2); } else m_pRender->render(painter, m_boundingRect); } } void ElectricFunctionModelSvgItemPT::initial() { setFlag(QGraphicsItem::ItemIsSelectable, false); setFlag(QGraphicsItem::ItemIsFocusable, false); setAcceptedMouseButtons(Qt::NoButton); }