Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: aros от Сентябрь 28, 2006, 15:22



Название: Программирование SVG, события?
Отправлено: aros от Сентябрь 28, 2006, 15:22
Народ подскажите пожалуйста как мне работаь с SVG - оъектами? А именно интересует возможность выполнять действия над объектами, такие как клик над SVG - объектом, over и т. д. ?
Желательно указать небольшой пример, что бы знать откуда начать копать самому?


Название: Программирование SVG, события?
Отправлено: vfilatov от Февраль 21, 2007, 17:08
Присоединяюсь к вопросу. Создаю SVG-файл в редакторе, в нём имеются различные объекты, хотелось бы отлавливать события типа клика, которые над этими объектами производит юзер. Насколько я понимаю, QtSVGRenderer не предоставляет полноценной объектной модели, т.е. списка объектов с указанием их типа и параметров, функций проверки, какому объекту принадлежит точка с указанными координатами и т.д. Пытался найти библиотеку, в которой это есть, нашёл только librsvg, но это какой-то монстр, давно не обновляется, тянет за собой gtk, а мне нужно что-нибудь нормальное под Windows. Может у кого есть какие-нибудь мысли по этому поводу?


Название: Программирование SVG, события?
Отправлено: yurror от Февраль 21, 2007, 18:31
Берем XML парсер на вход ему SVG получаем собственно списочек на его основе делаем объекты QGraphicsItem и в QGraphicsScene запихиваем... ну или что-то типо того... далее по примерчикам работы с QGraphics*
Сохранение: по массиву объектиков QGraphicsItem составляем XML'ку


Название: Программирование SVG, события?
Отправлено: vfilatov от Февраль 21, 2007, 20:15
Вот как раз хотелось бы избежать ручного парсинга SVG как обычного XML. Формат произвольного SVG может быть весьма сложным. Кроме того, в плане отображения меня вполне устроит QSvgRenderer. Хотелось бы получать информацию об объектах без привязки к GUI. Так же необходимо для заданной точки определять замкнутый контур, в который она попадает (представим, что SVG содержит набор пересекающихся прямых, кривых Безье, фигур, т.е. точка может находиться не внутри какого-то одного объекта, а внутри пересечения объектов). Понятно, что можно ручками, но те же графические редакторы, браузеры, всё это делают, неужели в каждом случае они реализуют функциональность заново.