我有一个带有场景(图形视图)的应用程序。在此场景中,用户可以创建汽车,并且当他使用汽车上的上下文菜单时,会在5米处显示属性列表。现在,当用户缩放时,属性列表超出显示区域,有时5米距离汽车太远。我如何确保它始终位于可见区域或放大时将其拉近。 实现的代码段:
void ObjectGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget /*= nullptr*/) {
auto carMiddle = mapToScene(transformOriginPoint());
carMiddle.rx() += 5.0;
carMiddle.ry() += 5.0;
auto overlayPos = mapFromScene(carMiddle);
overlayPos = PropertyWidget.moveInScreenCoords(overlayPos, {0.0, static_cast<float>(objectNameClassOverlay.widget()->height()) + 5.0f});
}
QPointF PropertyWidgetClass::moveInScreenCoords(QPointF &dest, const QPointF &delta) {
if (scene() == nullptr) return dest;
auto views = scene()->views();
if (views.size() < 1) return dest;
auto firstView = views.first();
setFlag(QGraphicsItem::ItemIgnoresTransformations, false);
auto r = deviceTransform(firstView->viewportTransform()).map(dest);
r = deviceTransform(firstView->viewportTransform()).inverted().map(r + delta);
setFlag(QGraphicsItem::ItemIgnoresTransformations, true);
return r;
}