我正在尝试将我的导出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 在生成 Svg 时将 QSvgGraphicsItem 转换为图像