QT-Graphics - Как ограничить движение элемента - PullRequest
1 голос
/ 02 ноября 2010

Я делаю проект смешивания картинок, используя QGraphics Scene. Поэтому я помещаю изображения в QGraphicsscene как QgraphicspixmapItem. Но проблема в том, что когда я перемещаю его (путем перетаскивания мышью), представление QGraphics автоматически расширяется. Я хочу ограничить это действие. Кто-нибудь может мне помочь в этом?

Ответы [ 3 ]

1 голос
/ 02 ноября 2010

Полагаю, вам придется создать подкласс QGraphicsPixmapItem для повторной реализации метода QGraphicsItem :: itemChange () .

Просмотрите страницу справки оэта функция : есть пример, который демонстрирует, что именно вы пытаетесь сделать:

QVariant Component::itemChange(GraphicsItemChange change, const QVariant &value)
{
   if (change == ItemPositionChange && scene()) {
      // value is the new position.
      QPointF newPos = value.toPointF();
      QRectF rect = scene()->sceneRect();
      if (!rect.contains(newPos)) {
         // Keep the item inside the scene rect.
         newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));
         newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));
         return newPos;
      }
  }
  return QGraphicsItem::itemChange(change, value);
}
1 голос
/ 02 ноября 2010

Минимальный пример кода может помочь.Вы указали sceneRect ?Обратите внимание на этот вопрос:

QGraphicsView прокрутка и масштабирование / обрезка изображений

... и этот поток в QtCentre :

В: Границы "жесткие"?Другими словами: что произойдет, если я создам QGraphicsScene с QGraphicsScene (0, 0, 500, 500) и затем попытаюсь поместить элемент, скажем, в положение (-50, -50)?

A: Нет, структура довольно гибкая.Фактически, если вы не укажете sceneRect, он будет расти по мере добавления элементов, чтобы охватить их все.

0 голосов
/ 12 ноября 2010

Наконец я использовал сигнал QGraphicsScene-> (cnanged).

Я объединил это с функцией appp Соответствующей, которая проверяет позицию выбранного элемента и поддерживает ее в заданной области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...