Здравствуйте. Столкнулся со следующей проблемой:
Мне надо нарисовать не масштабируемый Item на сцене. Про флаг ItemIgnoresTransformations я знаю. При выводе итема все нормально до тех пор, пока не сменишь масштаб. Он пропадает. Если вернуть масштаб - появляется. В отладчике такая ситуация:
- вызов paint не происходит
- вызов boundingRect происходит
- просил вывести boundingRect Item'а и текущий сцены - item попадает во вьюпорт.
Кто нибудь сталкивался с такой проблемой? Где то туплю, а где не ясно
class DebugInfoWindow
: public QGraphicsItem
{
public:
DebugInfoWindow(MapView* mapView, QGraphicsItem* parent=0);
QRectF boundingRect() const;
void paint(QPainter* painter
,const QStyleOptionGraphicsItem* option
,QWidget* widget);
private:
QString debugInfo() const;
MapView* m_pMapView;
const int m_delta;
};
DebugInfoWindow::DebugInfoWindow(MapView* mapView, QGraphicsItem* parent)
: QGraphicsItem(parent)
,m_pMapView(mapView)
,m_delta(5)
{
setFlag(ItemIgnoresTransformations);
setZValue(1000000.0);
}
QString DebugInfoWindow::debugInfo() const
{
return QString("Scale: %1\nUnits: %2").arg(1).arg(2);
}
QRectF DebugInfoWindow::boundingRect() const
{
QFontMetricsF fm(QApplication::font());
QRectF rect(fm.boundingRect(debugInfo()));
QPointF topLeft(m_pMapView->mapToScene(QPoint(0, 0)));
QPointF bottomRight(m_pMapView->mapToScene(QPoint(rect.width() + 2*m_delta
,rect.height() + 2*m_delta)));
return QRectF(topLeft, bottomRight);
}
void DebugInfoWindow::paint(QPainter* painter
,const QStyleOptionGraphicsItem* option
,QWidget* widget)
{
painter->setPen(Qt::green);
QColor c(Qt::darkGreen);
c.setAlpha(120);
painter->setBrush(c);
painter->drawRect(boundingRect());
QPointF topLeftText(m_pMapView->mapToScene(QPoint(m_delta, m_delta)));
QPointF bottomRightText(m_pMapView->mapToScene(QPoint(boundingRect().width() - m_delta
,boundingRect().height() - m_delta)));
painter->setPen(Qt::yellow);
painter->drawText(QRectF(topLeftText, bottomRightText), Qt::AlignLeft,debugInfo());
}