7

我有一个QGraphicsScene充满. 但是,我希望有一个 始终位于屏幕左上角的标签。忽略缩放很容易,我可以,但我还没有弄清楚如何强制位置保持在左上角。让我的标签“浮动”在同一个地方的最佳方法是什么?QGraphicsItemsQGraphicsItemsQGraphicsTextItemsetFlags(QGraphicsItem::ItemIgnoresTransformations)

4

2 回答 2

7

我认为唯一(可行的)方法是每帧重新计算文本项的位置。为此,只需将 QGraphicsView 子类化,重写paintEvent 并使用 QGraphicsView::mapToScene() 来计算新位置。就像是:

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

我已经做过很多次了,而且效果很好。

当然,您可以像 Arnold Spence 在他的回答中提到的那样创建普通的 QLabel。但是,这在许多情况下都不起作用(例如,如果您真的想在图形视图顶部放置标签并且您正在使用 OpenGL 加速的视口)。

于 2011-04-29T10:17:26.893 回答
3

也许您只是想在视图上放置一个常规权限,而不是像这个问题QLabel中讨论的那样试图让场景的一部分留在一个地方。

注意:正如另一个答案中提到的,这个技巧通常不适用于硬件加速视图。在这些情况下,您需要使文本项成为场景的一部分。

于 2011-04-29T07:32:18.210 回答