2012-02-16 8 views
1

SVGをスケーラブルな背景画像(たとえば、ボタンの背景として丸みのある長方形)として使用したいと思います。私の問題は、ボタンのサイズはボタンの内容に依存するということです。そのテキスト。 SVGをさまざまなサイズとアスペクトで塗りつぶすメソッドが必要ですが、同じ線幅と半径を使用する必要があります。私のアプローチでQtで線幅と半径に影響を与えずにSVGをスケーリングする

私は100%の幅と高さ

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg xmlns="http://www.w3.org/2000/svg"> 
<rect id="rect0815" x="0" y="0" width="100%" height="100%" rx="15" ry="15" 
     fill="red" stroke="#000000" stroke-width="2"/> 
</svg> 

でSVGを使用し、背景としてそれをレンダリング:

void paintEvent(QPaintEvent * pEvent) 
{ 
    QPainter oPainter(this); 
    QSvgRenderer oRenderer(QString("../share/images/background.svg")); 
    oRenderer.render(&oPainter, pEvent->rect()); 
} 

しかし、これは私のFIX-を使用するのと同じ歪んだ結果を与えました幅SVG。また、私はQSvgRenderer::setViewPort()を試しても何の効果もありませんでした。

敬具、

チャーリー

答えて

2

線幅の要求は非常に簡単です:私は別にスケーリング半径を防止するための方法を筆者は知りません

<rect id="rect0815" vector-effect="non-scaling-stroke" x="0" ... /> 

:あなたのSVGにvector-effect="non-scaling-stroke"を追加しますボタンが最初に描画/サイズ変更されたときに再計算し、SVGを動的に更新します。しかし、それはSVGのポイントをかなり凌駕します。計算を行い、直接ペイントすることもできます。

+0

とwith/heightの%値は標準に準拠していませんか? (たとえそれがFirefoxで動作していても) – Charly

関連する問題