Масштабирование SVG без влияния на ширину линии и радиус с помощью Qt - PullRequest
1 голос
/ 16 февраля 2012

Я хотел бы использовать SVG в качестве масштабируемых фоновых изображений (например, прямоугольник со скругленными углами в качестве фона кнопки). Моя проблема в том, что размер кнопки зависит от содержимого кнопки - например, его текст. Теперь мне нужен метод для рисования моего SVG с разными размерами и аспектами, но с одинаковой шириной линии и радиусом.

В моем подходе я использовал 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>

и отображается как фон:

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

Но это дало мне тот же искаженный результат, что и использование SVG с фиксированной шириной. Также я попробовал QSvgRenderer::setViewPort() без какого-либо положительного эффекта.

С уважением,

Charly

1 Ответ

2 голосов
/ 16 февраля 2012

Запрос ширины линии довольно прост: добавьте vector-effect="non-scaling-stroke" к вашему SVG:

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

Я не знаю способа предотвратить масштабирование радиуса, кроме пересчета его при первом рисовании кнопки /изменен размер и динамическое обновление SVG.Но тогда это в значительной степени побеждает точку зрения SVG;Вы могли бы также сделать вычисления и нарисовать это непосредственно.

...