Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: evilguard от Март 08, 2007, 21:59



Название: QGraphicsItem и BoundingRect
Отправлено: evilguard от Март 08, 2007, 21:59
В общем у меня рисуется картинка в QGraphicsItem, но мне надо добавить возможность не выводить ее всю, а обрезать(то есть границы прямоугольной рамки менять). Если менять ее в Bounding Rect, то "обрезанные части" изображения будут выводиться все равно, просто они будут за пределами QGraphicsItem. Как сделать нормальное обрезание?


Название: QGraphicsItem и BoundingRect
Отправлено: Вячеслав от Март 08, 2007, 23:24
IMHO в paint'e отслеживать ...
QStyleOptionGraphicsItem -> QRectF QStyleOptionGraphicsItem::exposedRect


Название: QGraphicsItem и BoundingRect
Отправлено: evilguard от Март 09, 2007, 22:11
Че-то я торможу, а как задавать значение QRectF QStyleOptionGraphicsItem::exposedRect?
Пробовал в paint()
Код:

option->exposedRect = QRectF(0,0,width/2,height/2);

Не получается :(


Название: QGraphicsItem и BoundingRect
Отправлено: Вячеслав от Март 09, 2007, 22:15
Код:

QRectF QStyleOptionGraphicsItem::exposedRect
This variable holds the exposed rectangle, in item coordinates.
Make use of this rectangle to speed up item drawing when only parts of the item are exposed. If the whole item is exposed, this rectangle will be the same as QGraphicsItem::boundingRect().
Если мне мое знание буржуйского не изменяет - то exposedRect содержит область итема для отрисовки .....


Название: QGraphicsItem и BoundingRect
Отправлено: evilguard от Март 10, 2007, 00:43
А, разобрался, (перейдем на ты ;) )  спасибо, что навел на мысль, хоть exposedRect и не совсем то.
Чтобы обрезать, то что не нужно, надо использовать:
Код:

painter->setClipRect(rect);

Где rect - прямоугольник, в котором изображение останется, а все остальное не будет отображаться.