Me metí en el mismo problema, y me tomó un tiempo para resolverlo. Así es como lo resolví.
Extienda una clase QGraphicsItem, anule la pintura(). Dentro de la pintura(), restablezca el factor de escala de la transformación a 1 (que son m11 y m22), y guarde el m11 (factor de escala x) y m22 (factor de escala y) antes del reinicio. Luego, dibuja como lo harías normalmente pero multiplica tu x con m11 e y con m22. Esto evita el dibujo con la transformación predeterminada, pero calcula explícitamente las posiciones de acuerdo con la transformación de la escena.
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget)
{
QTransform t = painter->transform();
qreal m11 = t.m11(), m22 = t.m22();
painter->save(); // save painter state
painter->setTransform(QTransform(m11, t.m12(), t.m13(),
t.m21(), 1, t.m23(), t.m31(),
t.m32(), t.m33()));
int x = 0, y = 0; // item's coordinates
painter->drawText(x*m11, y*m22, "Text"); // the text itself will not be scaled, but when the scene is transformed, this text will still anchor correctly
painter->restore(); // restore painter state
}
El siguiente bloque de código está drenando con la transformación por defecto
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget)
{
int x = 0, y = 0;
painter->drawText(x, y, "Text");
}
Puede probar ambos para ver la diferencia. Espero que esto ayude.
también tener un pico en http://doc.trolltech.com/4.5/qpen.html#setCosmetic si está utilizando una pintura personalizada rutina – mpen