Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: d13mon от Январь 19, 2014, 15:41



Название: [РЕШЕНО] Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: d13mon от Январь 19, 2014, 15:41
Здравствуйте.

Есть кастом-виджет, в нем графическая сцена. На ней много элементов QGraphicsPixmapItem, грубо говоря разноцветные прямоугольники. Виджет осуществляет масштабирование сцены - стандартно через  zoom in, zoom out по оси Ox, по вертикали же сцена фактически фиксирована. Проблема в том, что когда делаешь zoom out, то на определенном этапе мелкие элементы на сцене становятся не видны, исчезают из-за того что малы относительно размеров сцены. Можно ли (и как) сделать так, чтобы элементы никогда не исчезали т.е уменьшались вплоть 1 пикселя по x, но оставались видны?


Название: Re: Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: gil9red от Январь 20, 2014, 05:20
Знакомая тема....
Такую уже создавали :)


Название: Re: Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: Igors от Январь 20, 2014, 10:43
Знакомая тема....
Такую уже создавали :)
С тем же результатом?  :)
Мне тоже интересно как это порешать


Название: Re: Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: alex312 от Январь 20, 2014, 11:19
Нужно самостоятельно регулировать размеры элемента в зависимости от масштаба сцены
Псевдокод:
Код
C++ (Qt)
 
void RoundRectItem::paint(QPainter *painter,
                         const QStyleOptionGraphicsItem *option,
                         QWidget *widget)
{
   const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
   if(lod > 10)
          painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
   if(lod > 20)
          painter->drawRoundedRect(-20, -20, 40, 40, 10, 10);
}
 
 

*Все числа в примере с потолка.


Название: Re: Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: d13mon от Январь 21, 2014, 21:10
Знакомая тема....
Такую уже создавали :)

Да ,я недавно задавал в теме GUI. Потом понял что ошибся темой и перенес сюда.



Название: Re: Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: d13mon от Январь 21, 2014, 21:15
Нужно самостоятельно регулировать размеры элемента в зависимости от масштаба сцены
Псевдокод:
Код
C++ (Qt)
 
void RoundRectItem::paint(QPainter *painter,
                         const QStyleOptionGraphicsItem *option,
                         QWidget *widget)
{
   const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
   if(lod > 10)
          painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
   if(lod > 20)
          painter->drawRoundedRect(-20, -20, 40, 40, 10, 10);
}
 
 

*Все числа в примере с потолка.


О, благодарю, не знал что есть такая опция.



Название: Re: Исчезание элементов в QGraphicsScene при масштабировании
Отправлено: d13mon от Январь 21, 2014, 21:20
Ещё могу добавить, что большую роль в скрытии играет установка QPen при отрисовке элемента QGraphicsItem. То есть если отрисовывать границу по boundingRect() элемента, то он будет скрыт в сцене намного позже при zoom out. Если же не отрисовывать контур элемента, то он скрывается в виде (QGraphicsView)) значительно раньше при zoom out