#include "graphicsItem/electricSvgItemPT.h" #include "global.h" #include #include #include #include #include ElectricSvgItemPT::ElectricSvgItemPT(const QRect &rect, QGraphicsItem *parent) : ElectricSvgItem(rect,parent) { initial(); } ElectricSvgItemPT::ElectricSvgItemPT(const ElectricSvgItemPT& obj) : ElectricSvgItem(obj) { initial(); _itemType = obj._itemType; } ElectricSvgItemPT::~ElectricSvgItemPT() { } ElectricSvgItemPT* ElectricSvgItemPT::clone() const { return new ElectricSvgItemPT(*this); } void ElectricSvgItemPT::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()) return; m_pRender->render(painter, m_boundingRect); } } void ElectricSvgItemPT::initial() { setFlag(QGraphicsItem::ItemIsSelectable, false); setFlag(QGraphicsItem::ItemIsFocusable, false); setAcceptedMouseButtons(Qt::NoButton); }