2008-10-25 5 views
7

Я хочу, чтобы мое приложение Qt могло сохранять простую векторную графику в буфер обмена совместимым способом. В окнах я хочу иметь возможность вставлять графику в Microsoft Word или Powerpoint. В Linux я хочу быть совместимым с Open Office.Формат векторной графики для Qt

Какой формат вы бы порекомендовали? Может ли Qt генерировать EMF в простой форме? Является ли SVG опцией?

Обновление:

Мой текущий план, чтобы добавить часть собственного кода win32 для визуализации графики ЭДС на окнах. Этот код не будет доступен в Linux.

ответ

4

The QGraphicsView класс и связанные с ним помощники могут оказать формат метафайла QT через QPicture класс (для которого вы могли бы написать транслятор ЭМП), в SVG через QSVGGenerator класса и POSTSCRIPT/PDF через QPrinter. Он также может отображать растровые форматы и различные другие цели.

AFAIK у него нет универсального средства рендеринга для EMF - вам нужно будет написать что-то еще, например, метафайл QT и преобразовать в EMF. Если вам нужно только подмножество графических примитивов, вам может понадобиться только поддержка этого подмножества в трансляторе. В противном случае вы можете перейти от SVG, который вы можете получить непосредственно из QT через QSVGGenerator.

+0

Я не считаю это простым решением. Написание такого родового переводчика займет недели. Спецификации EMF составляют 310 страниц. Было бы намного проще генерировать EMF напрямую (требуется только малая часть EMF). – danatel

3

У меня есть класс генерации PyQt QPaintEngine, создающий EMF: https://github.com/jeremysanders/veusz/blob/master/document/emf_export.py. Он использует библиотеку pyemf, но я думаю, что было бы довольно легко переносить на C++. К сожалению, файлы несовместимы с OpenOffice, поскольку OO имеет довольно поврежденную поддержку пути в файлах EMF. Он также преобразует текст в пути для WYSIWYG.