#ifndef SVGIMAGE_H
#define SVGIMAGE_H
#include <QQuickPaintedItem>
#include <QPixmap>
class QSvgRenderer;
class SVGImage : public QQuickPaintedItem
{
Q_OBJECT
public:
SVGImage(QQuickItem *parent = nullptr);
virtual void paint(QPainter *painter) override;
public:
Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
QString source() const { return m_svgSource; }
void setSource(const QString &src);
signals:
void sourceChanged();
private:
QString m_svgSource;
QSvgRenderer* m_svgRender;
QPixmap m_pixmap;
};
#endif
#include "SVGImage.h"
#include <QSvgRenderer>
#include <QPainter>
#include <QQmlFile>
#include <QQuickPaintedItem>
#include <QDebug>
SVGImage::SVGImage(QQuickItem *parent):
QQuickPaintedItem(parent)
{
m_svgRender = new QSvgRenderer(this);
}
void SVGImage::paint(QPainter *painter)
{
qDebug() << __func__ << "()" << m_svgSource;
qDebug() << QQmlFile::urlToLocalFileOrQrc(m_svgSource);
m_svgRender->load(QQmlFile::urlToLocalFileOrQrc(m_svgSource));
QSize size = m_svgRender->defaultSize();
QBrush brush(QColor("#007430"));
painter->setBrush(brush);
painter->setRenderHints(QPainter::Antialiasing);
m_svgRender->render(painter);
}
void SVGImage::setSource(const QString &src)
{
if (m_svgSource != src) {
m_svgSource = src;
emit sourceChanged();
}
}
qmlRegisterType<SVGImage>("SVGImage", 1, 0, "SVGImage");
import SVGImage 1.0
SVGImage {
id: svgImage
width: 24
height: 24
anchors.centerIn: parent
source: "qrc:/zoom_in_24.svg"
Rectangle {
anchors.fill: parent
border.color: "red"
border.width: 3
color: Qt.rgba(0, 0, 0, 0)
}
}