Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Icoz от Март 31, 2008, 23:16



Название: [4.3.3] Что посоветуете с svg
Отправлено: Icoz от Март 31, 2008, 23:16
Есть svg-файл, в котором я знаю названия некоторых id элементов.
Надо нарисовать этот svg и обработать клики на конкретные объекты.
Начал пробовать через QGraphicScene+QGraphicSvgItem, но тогда мне надо самому пихать итем в нужную позицию на сцене, которую я не знаю. А можно ли как-то попроще? Чтобы отрисовка с файла шла сама, а я QGraphicSvgItem цеплял только к определенным объектам?
Или может я что у QSvgWidget прозевал и там можно клики отследить?

Короче, совет нужен...

ЗЫ. Хотя бы как для элемента узнать на какой позиции он должен был бы быть?


Название: Re: [4.3.3] Что посоветуете с svg
Отправлено: vaprele07 от Апрель 01, 2008, 02:53
QSvgRenderer::boundsOnElement


Название: Re: [4.3.3] Что посоветуете с svg
Отправлено: Icoz от Апрель 01, 2008, 22:49
Ок. Теперь юзаю QSvgWidget c доступом через renderer() к QSvgRenderer.
Другая проблема появилась. Не могу заставить свг-виджет сохранять пропорции изображения. Уже и gridlayout  с двумя спейсерами сделал (гор. и верт.) - все равно. Игрался с svgWidget->setSizePolicy - по фигу, не сохраняет пропорции - рисует как хочет (сжато/растянуто).
setMinimumSize  я ему сделал - хотя бы в никуда не девается теперь при цеплянии док-виджета.
setMaximumSize делать не хочу, чтобы мог увеличиваться. Но мне нужно сохранять пропорции виджета!
КАК? Только наследованием с перехватом всяких ресайзов и прочего?


Название: Re: [4.3.3] Что посоветуете с svg
Отправлено: ритт от Апрель 02, 2008, 03:27
ммм...интересно. ещё не приходилось сталкиваться
возможно, QSizePolicy::setHeightForWidth поможет


Название: Re: [4.3.3] Что посоветуете с svg
Отправлено: Icoz от Апрель 02, 2008, 18:58
ммм...интересно. ещё не приходилось сталкиваться
возможно, QSizePolicy::setHeightForWidth поможет
Круто! Вот код из конструктора:
Код:
    svg = new QSvgWidget(file, this);
    QSizePolicy sp(QSizePolicy::Maximum,QSizePolicy::Maximum);
    sp.setHeightForWidth(true);
    svg->setSizePolicy(sp);
    svg->resize(svg->sizeHint());
Если в третьей строке true, то картинки нет ВООБЩЕ! Иначе - есть. ;)