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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Исчезание элементов в QGraphicsScene при масштабировании  (Прочитано 4076 раз)
d13mon
Гость
« : Январь 19, 2014, 15:41 »

Здравствуйте.

Есть кастом-виджет, в нем графическая сцена. На ней много элементов QGraphicsPixmapItem, грубо говоря разноцветные прямоугольники. Виджет осуществляет масштабирование сцены - стандартно через  zoom in, zoom out по оси Ox, по вертикали же сцена фактически фиксирована. Проблема в том, что когда делаешь zoom out, то на определенном этапе мелкие элементы на сцене становятся не видны, исчезают из-за того что малы относительно размеров сцены. Можно ли (и как) сделать так, чтобы элементы никогда не исчезали т.е уменьшались вплоть 1 пикселя по x, но оставались видны?
« Последнее редактирование: Январь 23, 2014, 23:03 от d13mon » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Январь 20, 2014, 05:20 »

Знакомая тема....
Такую уже создавали Улыбающийся
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Январь 20, 2014, 10:43 »

Знакомая тема....
Такую уже создавали Улыбающийся
С тем же результатом?  Улыбающийся
Мне тоже интересно как это порешать
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #3 : Январь 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);
}
 
 

*Все числа в примере с потолка.
Записан
d13mon
Гость
« Ответ #4 : Январь 21, 2014, 21:10 »

Знакомая тема....
Такую уже создавали Улыбающийся

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

Записан
d13mon
Гость
« Ответ #5 : Январь 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);
}
 
 

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


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

Записан
d13mon
Гость
« Ответ #6 : Январь 21, 2014, 21:20 »

Ещё могу добавить, что большую роль в скрытии играет установка QPen при отрисовке элемента QGraphicsItem. То есть если отрисовывать границу по boundingRect() элемента, то он будет скрыт в сцене намного позже при zoom out. Если же не отрисовывать контур элемента, то он скрывается в виде (QGraphicsView)) значительно раньше при zoom out
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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