Russian Qt Forum
Ноябрь 01, 2024, 07:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: фигуры и их размер  (Прочитано 4782 раз)
serega-5508
Гость
« : Июнь 03, 2011, 20:06 »

У меня есть прямоугольник, квадрат, эллипс (QGraphicsRectItem, QGraphicsEllipseItem). При выделении их появляется область. Я хочу, сделать на углах квадратики, за которые можно понятуть и изменять размеры фигур. См.фото. Как это сделать??? Подскажите, пожалуйста, очень надо!

Записан
Zartul
Гость
« Ответ #1 : Июнь 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,
// ...
};

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

ну а третей функцией на основании выставленного значения этого енума производите изменение размера фигуры и вызываете перерисовку
Записан
serega-5508
Гость
« Ответ #2 : Июнь 05, 2011, 01:04 »

как начертить квадратики по углам?Непонимающий
Записан
ufna
Гость
« Ответ #3 : Июнь 05, 2011, 01:08 »

сделать собственный айтем, который "цепляется" на QGraphicsItem, и на основе его размеров "рисуется" где нужно квадратиками, за них же и двигается, меняя айтем "под собой".
Записан
serega-5508
Гость
« Ответ #4 : Июнь 05, 2011, 02:23 »

понял! помогите с вычислением координат, а то я что-то запутался, уже час сижу. а?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #5 : Июнь 05, 2011, 03:33 »

пускай p - центр эллипса, rh - горизонтальный радиус, rv - вертикальный радиус. тогда ограничивающий его прямоугольник: QRectF(p.x-rh, p.y-rv, 2*rh, 2*rv)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
_OLEGator_
Гость
« Ответ #6 : Июнь 05, 2011, 19:38 »

Прямоугольная область в локальных координатах QGraphicsItem:
Код:
QRectF QGraphicsItem::boundingRect ()

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

В общем случае, для вычисления размеров произвольных фигур можно пользоваться
Код:
QRectF QPainterPath::boundingRect ()
« Последнее редактирование: Июнь 05, 2011, 19:41 от _OLEGator_ » Записан
serega-5508
Гость
« Ответ #7 : Июнь 05, 2011, 21:14 »

пробовал переопределять метод
Код:
void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )
но не отлавливало его, не заходило в ф-ю.
Записан
_OLEGator_
Гость
« Ответ #8 : Июнь 06, 2011, 20:05 »

Должно все работать... Дай тогда на код посмотреть
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.169 секунд. Запросов: 23.