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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перемещение QGraphicsItem по сцене без пересечений  (Прочитано 3939 раз)
Ground
Гость
« : Май 16, 2015, 18:08 »

Добрый день!
Мне нужно на сцене перемещать мышью QGraphicsRectItem. Причем перемещать так, чтобы они не пересекались.
Я переопределил mouseMoveEvent в QGraphicsRectItem, но события о движении мыши приходят рывками, т.е. может быть так, что в первом событии, координата мыши (1, 1), а во втором уже (10, 10).

Код
C++ (Qt)
void GraphicsRectItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
{
   qDebug()<<event->scenePos()<<event->lastScenePos();
 
   QGraphicsRectItem* item;
 
   foreach (item, mItems)
   {
       if (this == item)
           continue;
 
       if (collidesWithItem(item, Qt::IntersectsItemBoundingRect))
       {
           event->accept();
           return;
       }
   }
 
   QGraphicsRectItem::mouseMoveEvent(event);
}
 

И получается следующая ситуация (на картинке):



Как сделать так, чтобы при движении мыши, двигаемый QGraphicsRectItem не пересекал никакой другой Item? Чтобы останавливался у его границы?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Май 17, 2015, 05:11 »

может быть так, что в первом событии, координата мыши (1, 1), а во втором уже (10, 10).
Напрашивается интерполировать, напр есть пересечение в (10, 10) - попробовать поставить айтем в позицию (5, 5) и.т.д. Когда нашли лучшую точку по диагонали пытаемся улучшить по х, затем по y. Др словами найти ближайшую (к текущей позиции мыши) валидную точку. Только делать это надо до того как движение состоялось
Записан
Bepec
Гость
« Ответ #2 : Май 17, 2015, 13:30 »

у вас скорее что то с программой. MouseMove приходит на каждую координату. Если она прыгает, то значит у вас программа подтормаживает.

PS хотя такая ситуация может быть и с планшетом, но тут уж извратиться надо Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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