Как заставить QSvgGenerator создавать векторизованный SVG вместо растрового SVG? - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь экспортировать свой QGraphicsScene в SVG следующим образом:

void MyScene::toSvg(QString filename)
{
    QSvgGenerator svgGen {};

    svgGen.setFileName(filename);
    svgGen.setSize({ 200, 200 });
    svgGen.setViewBox(QRect(0, 0, 200, 200));

    QPainter painter {};
    painter.begin(&svgGen);
    render(&painter);
    painter.end();
}

MyScene наследуется от QGraphicsScene.

В моей сцене у меня есть объекты которые унаследованы от QGraphicsItem.

Мой элемент отображается следующим образом:

void Node::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
    Q_UNUSED(widget)
    Q_UNUSED(option)

    painter->save();

    QPainterPath path;
    const QRectF rect(-m_size.width() / 2, -m_size.height() / 2, m_size.width(), m_size.height());
    path.addRoundedRect(rect, m_cornerRadius, m_cornerRadius);
    painter->setRenderHint(QPainter::Antialiasing);
    painter->fillPath(path, QBrush(m_color));

    painter->restore();
}

Теперь проблема в том, что я получаю только растровый SVG, поэтому он практически бесполезен. Примерно так:

<image x="38" y="59" width="41" height="15" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABGUlEQVRIie2TwWqEMBCG/2TXgCwe40lY8OhL6Ev4PEuex5fQl/AoCHsyeFIQdZ301FLFtVRLaWG/45BkvsnMAC9e/C3YN+N7MUcuL2VYFEWnqqr49XplAFCWpXFdl44kAYAwDEkpZbBDeCYZx/FJa22N42gRkQUAnPPxcrkckmyahjzPm7TW9El2jdX4TDKKonPf9xYRWZzzMwAQ0cO2bRJC7G5ZXdfGcRyybdtsdebZb2+2u+s6JqWkoigOzRQA+L7PtNa873vmOA5fFiGEMJ7nTUEQPJRSsyLOi7dMmqYTgCnP86NeH9xuN5ZlGZdS4n6/n9bODMPA2rZdXdif3uIt2LvsswNSSpMkCeGLdv8Wz/IeHqsX/543cmeARGeRY78AAAAASUVORK5CYII=" />

Должен ли я сделать что-то особенное в моих элементах, чтобы фактически получить SVG вместо растровых изображений?

РЕДАКТИРОВАТЬ: Это похоже на связь, но отключение кеша не произошло Помогите в моем случае с обычными QGraphicsItems: QSvgGenerator преобразует QSvgGraphicsItem в изображение при генерации Svg

1 Ответ

1 голос
/ 12 июля 2020

Кажется, что установка QGraphicsDropShadowEffect для элементов заставляет их как растровые изображения (вместе с графикой эффектов). Если я не установлю этот эффект, SVG будет векторизован.

...