Привет. Есть вот такой класс:
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. Подскажите, может как по-другому решить можно?