Pregunta

Esta pregunta ya tiene una respuesta aquí:

tengo un QGraphicsScene que esta lleno de QGraphicsItems, y el usuario puede transmitir y acercar para inspeccionar todos los diversos QGraphicsItems. Sin embargo, me gustaría tener un QGraphicsTextItem Etiqueta que siempre se queda en la parte superior izquierda de la pantalla. Ignorar los zooms es fácil, como puedo simplemente setFlags(QGraphicsItem::ItemIgnoresTransformations), pero todavía tengo que descubrir cómo forzar la posición para permanecer en la parte superior izquierda. ¿Cuál es la mejor manera de hacer que mi etiqueta "flote" en el mismo lugar?

¿Fue útil?

Solución

Quizás solo quieras poner un regular QLabel Justo en la vista en lugar de tratar de hacer que una parte de la escena permanezca en un lugar como se discutió en esta pregunta.

Nota: Como se menciona en otra respuesta, este truco a menudo no funcionará con vistas aceleradas de hardware. En estos casos, deberá hacer que los elementos de texto formen parte de la escena.

Otros consejos

Creo que la única forma (realable) de hacerlo es recalcular la posición para su elemento de texto en cada cuadro. Para hacer esto, simplemente subclase QGraphicsView, anule pintarvent y use QGraphicsView :: mapToscene () para calcular una nueva posición. Algo como:

void MyGraphicsView::paintEvent(QPaintEvent*)
{
    QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
    m_textItem->setPos(scenePos);
}

Lo he hecho muchas veces y ha funcionado muy bien.

Por supuesto, podría crear Qlabel normal como Arnold Spence menciona en su respuesta. Sin embargo, esto no funcionará en muchas situaciones (por ejemplo, si realmente desea colocar la etiqueta en la parte superior de la vista de gráficos y está utilizando la ventana de ventanas auditiva acelerada de OpenGL).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top