我正在尝试制作将在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 - 在Qt中呈现的SVG中多行居中文本-LMLPHP这是浏览器中的外观。

在Qt中,当加载到QGraphicsSvgItem中时,它看起来像这样:
qt - 在Qt中呈现的SVG中多行居中文本-LMLPHP

我想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>


我感到困惑的是,即使从教程中复制svg,任何包含tspan的svg都可以在浏览器中正确呈现,但不会显示在QGraphicsSvgItem中-也许它们可以在完全不同的位置显示。

最佳答案

我相信您的问题的答案在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

另见Does QT support svg?

关于qt - 在Qt中呈现的SVG中多行居中文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37548128/

10-11 23:13
查看更多