LINUX.ORG.RU

Qt QGraphicsitem редактирование мышью

 ,


0

1

Доброго времени суток! С-но необходимо реализовать изменение объектов(наследуются от QGraphicsItem) с помощью мыши (resize) через контекстное меню. Само меню уже реализовано. Осталось, чтобы при нажатии на меню, пользователь мог мышью растягивать объект(пока стандартный прямоугольник). Я вижу несколько способов это делать:

1. В методах класса объекта: в paint() в случае выбора редактирования отображается не реальный объект, а прямоугольник в координатах объекта, но ширина-высота зависит от перемещения мыши. Дальше отлавливается нажатие клавиши enter и сохраняются новые координаты. Из трудностей - постоянно придется переопределять область отрисовки.

2. Переопределить класс сцены и рисовать все это дело там

3. Использовать главное окно. Ловить сигнал айтема, рисовать вокруг него изменямую мышью рамку и после нажатии клавиши [Enter] посылать объекту, что его размеры изменились

Подскажите пожалуйста, как сделать это правильнее? А то я новичок и не хочется делать через пятую точку.

Почему бы не сделать хваталки по углам а-ля sizegrip? Отловить mousePress мыши в эту область, поставить флаг resizing=true, в mouseMove изменять, в mouseRelease отпустить. Хваталки можно показывать, только когда курсор наезжает на объект, через hover*Event. И всё это только через GraphicsItem, который и так переопределяется.

Так будет естественнее и привычнее для пользователя.

schizoid ★★★ ()

См. мой проект — http://www.qfrost.net/download/0.17.7/qfrost.tar.xz

В src/tools классы Lug (хваталка), RectangularTool и RectajgularSelection.

Lug — это итем, следующий за привязкой (в твоём случае, видимо, вместо привязки будет тупо курсор), если он активен + обрабатывающий наведение мыши.

RectangularTool — это класс для прямоугольных инструментов с изменяемым размером. У неё 9 детишек-Lug'ов (по углам, по сторонам и в центре), к перемещениям которых он привязан.

Всё это выглядит как прямоугольные инструменты в GIMP.

Obey-Kun ★★★★★ ()
Последнее исправление: Obey-Kun (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.