Files
Renderive/Widget/component/SVG.cpp
T
2026-08-01 20:09:45 +08:00

50 lines
1.7 KiB
C++

#include "SVG.h"
#include <QSvgRenderer>
#include "private_psc_global_include/export.h"
void SVG_Image_Render::render(QPainter* painter, const QRectF& rect) {
render(painter, rect, _color);
}
void SVG_Image_Render::render(QPainter* painter) {
QSvgRenderer renderer(change_color(_color));
renderer.render(painter);
}
void SVG_Image_Render::render(QPainter* painter, const QRectF& rect, const QColor& color) {
QSvgRenderer renderer(change_color(color));
renderer.render(painter, rect);
}
QImage SVG_Image_Render::to_image(QSize size, const QColor& color) {
QImage image(size, QImage::Format_ARGB32);
image.fill(Qt::transparent);
QPainter painter(&image);
QSvgRenderer renderer(change_color(color));
renderer.render(&painter, QRectF(QPointF(0, 0), QSizeF(size)));
return image;
}
QPixmap SVG_Image_Render::to_pixmap(QSize size, const QColor& color) {
return QPixmap::fromImage(to_image(size, color));
}
QByteArray SVG_Image_Render::change_color(const QColor& color) {
QDomElement root = doc.documentElement();
auto text = color.name(QColor::HexRgb).toUpper();
root.setAttribute("fill", text);
if (color.alpha() != 255) {
root.setAttribute("fill-opacity", QString::number(color.alphaF()));
}
QByteArray ret;
QTextStream out_stream(&ret);
doc.save(out_stream, 4);
return ret;
}
SVG_Image_Render& SVG_Image_Render::create() {
QFile file(_path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
std::cout << VAR_STR_1(_path.toStdString()) + "无法打开! " + LOG_POS;
return *this;
}
QTextStream in(&file);
QString svg_content = in.readAll();
file.close();
doc.setContent(svg_content);
return *this;
}