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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: boundingRect для непрямоугольной фигуры  (Прочитано 2930 раз)
Nidxogg
Гость
« : Октябрь 16, 2013, 23:12 »

Требуется нарисовать ломанную линию  (стрелка)
Собственно, наследуюсь от QGraphicsItem. Переоопределяю вирт.методы Paint и boundingRect
Вот только boundingRect возвращает прямоугольную область, а хотелось бы что-то подобное на очертание стрелки.


Вроде читал, что можно также переопределить метод shape(), только не понято как его привязать к boundingRect
Записан
mutineer
Гость
« Ответ #1 : Октябрь 17, 2013, 09:15 »

Попробуй QRegion QGraphicsItem::boundingRegion
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Октябрь 17, 2013, 10:16 »

В любом случае вам придётся переопределять этот метод. будь это эллипс или сложный полигон.
У меня таких объектов много.

Как делать.

Код:
QPainterPath YourClass::shape() const
{
QPainterPath path;
path.addPolygon(somePolygon1);
path.addPolygon(somePolygon2);
...
path.addRect(rect1);
path.addEllipse(...);
return path;
}

QRectF YourClass::boundingRect() const
{
return shape().boundingRect().simplified(); //для убирания наложения полигонов и прочих объектов
}

Еще есть такой нюанс, который я выяснил довольно позлно, что если нужно объеденить несколько полигонов и получить в результате их суммирующую форму, то простое добавление к path не поможет, так как по сути path будет состоять из продолжающихся полигонов друг за другом, что в конечном итоге не то что надо, тогда следует делать так
Код:
QPainterPath path;
path.addPolygon(poly1);
QPainterPath path2;
path2.addPolygon(poly2);
path |= path2;
return path;

Такой код даст правильный резултат наложения нескольких фигур друг на друга без "дырок" в областях наложения.
Записан
Nidxogg
Гость
« Ответ #3 : Октябрь 18, 2013, 17:32 »

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


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