2016-05-31 56 views
4

我想製作一個svg,將在QGraphicsSvgItem中讀取。我看了一些資料,似乎這就是我想要的東西:在qt中渲染的多行中心文本

<?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> 

這將創建一個矩形 - 和多行文本的正中央:
enter image description here這就是它看起來像在瀏覽器中。

在Qt儘管在QGraphicsSvgItem加載時,它看起來像這樣:
enter image description here

我想,自己是不是由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(我應該怎麼PU t在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中顯示,或者它們可能只在完全不同的位置顯示。

回答

2

我相信你的問題的答案在QGraphicsSvg和標準SVG Tiny 1.2的文檔中。

你的庫只支持SVG微小的,而不是完整SVG規範,雖然SVG微小的不支持「TSPAN」,同時也指出這一點:

「位置屬性,比如‘X’,‘Y’和'旋轉「在SVG Tiny 1.2的'tspan'上不可用。」

見SVG微型1.2:https://www.w3.org/TR/SVGTiny12/text.html#TSpanElement

也見Does QT support svg?