Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: serega-5508 от Июнь 03, 2011, 20:06



Название: фигуры и их размер
Отправлено: serega-5508 от Июнь 03, 2011, 20:06
У меня есть прямоугольник, квадрат, эллипс (QGraphicsRectItem, QGraphicsEllipseItem). При выделении их появляется область. Я хочу, сделать на углах квадратики, за которые можно понятуть и изменять размеры фигур. См.фото. Как это сделать??? Подскажите, пожалуйста, очень надо!

(http://231w.jpg)


Название: Re: фигуры и их размер
Отправлено: Zartul от Июнь 04, 2011, 20:54
советую обратить внимание на протектные виртуальные ф-и этих классов

Код
C++ (Qt)
virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event )
virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event )
virtual void mouseMoveEvent ( QGraphicsSceneMouseEvent * event )

в первой и второй функциях следует определить какой был квадрат захвачен (первой функцией), либо произошло отпускание мыши (второй функцией) и квадрат не захвачен

для того какой квадрат захвачен можно завести енум

например

Код
C++ (Qt)
enum RectTake
{
RT_NoDefine,
RT_Left,
RT_Right,
RT_Top,
RT_Bottom,
// ...
};

заводите переменную этого енума и меняете в первых двух ф-ях

ну а третей функцией на основании выставленного значения этого енума производите изменение размера фигуры и вызываете перерисовку


Название: Re: фигуры и их размер
Отправлено: serega-5508 от Июнь 05, 2011, 01:04
как начертить квадратики по углам????


Название: Re: фигуры и их размер
Отправлено: ufna от Июнь 05, 2011, 01:08
сделать собственный айтем, который "цепляется" на QGraphicsItem, и на основе его размеров "рисуется" где нужно квадратиками, за них же и двигается, меняя айтем "под собой".


Название: Re: фигуры и их размер
Отправлено: serega-5508 от Июнь 05, 2011, 02:23
понял! помогите с вычислением координат, а то я что-то запутался, уже час сижу. а?


Название: Re: фигуры и их размер
Отправлено: kambala от Июнь 05, 2011, 03:33
пускай p - центр эллипса, rh - горизонтальный радиус, rv - вертикальный радиус. тогда ограничивающий его прямоугольник: QRectF(p.x-rh, p.y-rv, 2*rh, 2*rv)


Название: Re: фигуры и их размер
Отправлено: _OLEGator_ от Июнь 05, 2011, 19:38
Прямоугольная область в локальных координатах QGraphicsItem:
Код:
QRectF QGraphicsItem::boundingRect ()

Рисовать эти манипуляторы нужно в переопределенной функции
Код:
void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )

В общем случае, для вычисления размеров произвольных фигур можно пользоваться
Код:
QRectF QPainterPath::boundingRect ()


Название: Re: фигуры и их размер
Отправлено: serega-5508 от Июнь 05, 2011, 21:14
пробовал переопределять метод
Код:
void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )
но не отлавливало его, не заходило в ф-ю.


Название: Re: фигуры и их размер
Отправлено: _OLEGator_ от Июнь 06, 2011, 20:05
Должно все работать... Дай тогда на код посмотреть