小编KD0*_*D07的帖子

应用QGraphicsItem :: ItemIgnoresTransformations后维护相对子位置

我有一个QGraphicsTextItem作为QGraphicsItem的父级.我想QGraphicsTextItem总是直接驻留在的QGraphicsItem以上,但我也希望文本保持相同的大小时,比例因子低于1,即文本保持它在1的比例因子的大小,即使父图形item缩小了.我发现QGraphicsItem::ItemIgnoresTransformations当比例因子低于1时将标志设置为true可以保留大小.

但我似乎无法找到一种方法来使文本的位置始终保持在QGraphicsItem之上.有没有办法做到这一点?我尝试使用deviceTransform ()函数,但是当我滚动时,文本仍然从QGraphicsItem移开.更糟糕的是,一些文本项目开始"摇晃",即他们开始不断地改变他们的位置,所以它看起来像是在颤抖.如果这是我需要使用的功能,我想我不知道如何正确使用它.

在我的QGraphicsItem的构造函数中,我添加了一个QGraphicsTextItem:

fTextItem = new QGraphicsTextItem(getName(), this);
fTextItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);
Run Code Online (Sandbox Code Playgroud)

这是QGraphicsItem的paint函数的代码片段

qreal lod = painter->worldTransform().m22();
if(lod <= 1.0) {
     fTextItem-setFlag(QGraphicsItem::ItemIgnoresTransformations);
     fTextItem->setPos(fTextItem->deviceTransform(view-viewportTransform()).inverted().map(view->mapFromScene(mapToScene(0,0))));
} else {
     fTextItem->setFlag(QGraphicsItem::ItemIgnoresTransformations, false);
     fTextItem->setPos(0, 0);
}
Run Code Online (Sandbox Code Playgroud)

qt qt4 qgraphicsview

8
推荐指数
2
解决办法
5045
查看次数

标签 统计

qgraphicsview ×1

qt ×1

qt4 ×1