Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: prog.devel от Апрель 26, 2011, 13:00



Название: SVG-rendering
Отправлено: prog.devel от Апрель 26, 2011, 13:00
Использую Qt 4.7 на Linux и Windows XP. Столкнулся со следующей проблемой: при отображении SVG появляются серьезные искажения. Пробовал рендеринг по схеме "QSvgRenderer -> QPainter -> QPaintDevice": нативный, в QImage, QPicture, OpenGL, QPrinter (PDF). Вывод на разные Paint Device отличается, однако искажения везде есть. Например, в pdf появляются засечки, а в QImage линии, нарисованные с использованием путей, имеют неверную длину. В том же Firefox или с использованием prince-xml все отображается без искажений.
Вот кусок исходного кода:
Код:
    QPrinter p(QPrinter::HighResolution);
    p.setOutputFormat(QPrinter::PdfFormat);
    p.setOutputFileName("test.pdf");
    QPainter painter;
    painter.begin(&p);
    QSvgRenderer svgRend("test.svg");
    svgRend.render(&painter);
    painter.end();

Оригинальное изображение (нормально отрисованное с использованием prince-xml), а также результат рендеринга (png и pdf) прилагаю.

Какие мысли?


Название: Re: SVG-rendering
Отправлено: prog.devel от Апрель 27, 2011, 01:34
Проблему решил. Выяснилось, что в QtSvg по умолчанию стили элементов не такие, как это прописано в спецификации svg (что странно). Пришлось писать таблицу стилей и явно задавать значения по умолчанию.