LINUX.ORG.RU

QGraphicsItem и ItemIgnoresTransformations

 ,


0

2

Привет. Есть вот такой класс:


    class GraphicsNode :
         public QObject,
         public QGraphicsItemGroup
      {
         Q_OBJECT

      public:
         GraphicsNode(..., QGraphicsItem * pParent = 0);

      private:
         ...
         QGraphicsRectItem* m_pStateRect;
         QGraphicsSimpleTextItem* m_pNodeLabel;
    };

GraphicsNode::GraphicsNode(..., QGraphicsItem* pParent) :
      QObject(),
      QGraphicsItemGroup(pParent),
      m_pStateRect(new QGraphicsRectItem(pParent)),
      m_pNodeLabel(new QGraphicsSimpleTextItem(pParent))
   {
      setZValue(-1);
      setAcceptsHoverEvents(true);
      setFlag(QGraphicsItem::ItemIsSelectable);

      m_pStateRect->setRect(0, 0, 0.4, 0.4);

      m_pNodeLabel->setText(QString::number(m_nodeId));
      m_pNodeLabel->setScale(0.6);

      addToGroup(m_pStateRect);
      addToGroup(m_pNodeLabel);

      // Set the item to be fixed size
      setFlag(QGraphicsItem::ItemIgnoresTransformations);
      setScale(20.0);
   }

У моего наследника QGraphicsView реализованы методы zoomIn / zoomOut:

   void MapWidget::zoomIn()
   {
      if (m_currentScale < m_scaleMax)
      {
         scale(m_scaleFactor, m_scaleFactor);
      }
   }

   void MapWidget::zoomOut()
   {
      if (m_currentScale > m_scaleMin)
      {
         scale(1 / m_scaleFactor, 1 / m_scaleFactor);
      }
   }

Проблема в том, что в GraphicsNode заданы и ItemIgnoresTransformations и scale, а из-за последнего у меня плывёт (в данном случае в левую сторону) zoomIn / zoomOut. Подскажите, может как по-другому решить можно?

★★★★★

Подскажите, может как по-другому решить можно?

нельзя, ты должен околеть, беглый очкарик, Христос непрощает иуд.

anonymous ()
Ответ на: комментарий от anonymous

Решил уже я. Короче отслеживаю scale у view и по сигналу масштабирую мою GraphicsNode в 1.0 / scale().

UVV ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.