我正在尝试创建一个将在QGraphicsSvgItem
中读取的svg。我读了一些文档,看来这就是我想要的:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100px" height="100px" viewBox="0 0 100 100" enable-background="new 0 0 100 100"
xml:space="preserve">
<rect fill="#437624" stroke="none" fill-opacity="1" x="0" y="0" width="100" height="100" />
<text y="50" transform="translate(50)">
<tspan x="0" text-anchor="middle">No</tspan>
<tspan x="0" text-anchor="middle" dy="15">Arrow</tspan>
</text>
</svg>
这会创建一个矩形 - 并且内部居中的多行文字:
这就是它在浏览器中的样子。
但是在Qt中,当加载到QGraphicsSvgItem
时,它看起来像这样:
我想Qt SVG渲染器不支持某些内容......
更糟糕的是,设置字体大小会使我的Qt文本完全消失:
<text y="40" font-size="24" transform="translate(50)">
<tspan x="0" text-anchor="middle">No</tspan>
<tspan x="0" text-anchor="middle" dy="30">Arrow</tspan>
</text>
如何让Qt从svg获取多行中心文本作为第一个图像(我应该在SVG中添加什么内容)?
(Qt 4.7至5.5 ......)
编辑:
这很有效(但是除了确定单个项目之外,还不能弄清楚如何做多行)
<text x="0" y="40" font-size="24" transform="translate(50)" text-anchor="middle">No</text>
<text x="0" y="70" font-size="24" transform="translate(50)" text-anchor="middle">Arrow</text>
我觉得令人费解的是,即使从教程中复制svgs,任何包含tspan
的svgs在浏览器中都能正确呈现,但不会在QGraphicsSvgItem
中显示 - 或者它们可能会完全不同位置。
答案 0 :(得分:2)
我相信您的问题的答案在QGraphicsSvg和标准SVG Tiny 1.2的文档中。
你的库只支持SVG Tiny而不是完整的SVG规范,虽然SVG Tiny支持“tspan”,但它也说明了这一点:
“SVG Tiny 1.2中'tspan'上没有'x','y'和'rotate'等位置属性。”
参见SVG Tiny 1.2:https://www.w3.org/TR/SVGTiny12/text.html#TSpanElement