【问题标题】:what is the qtransform in QGraphicsScene::itemAt()QGraphicsScene::itemAt() 中的 qtransform 是什么
【发布时间】:2012-12-11 03:01:47
【问题描述】:

我创建了一个自定义QGraphicsItem。并覆盖boundingRect()paint()

QRectF myTile::boundingRect() const
{
  return QRectF(xPos*10, yPos*10, 10, 10);
}

void myTile::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
  QRectF rec = boundingRect();
  int gvi = value * 255;
  QColor gv(gvi, gvi, gvi, 255);
  QBrush brush(gv);
  painter->fillRect(rec, brush);
  painter->drawRect(rec);
}

然后我使用addItem() 将项目添加到场景中。现在我想通过它的位置从场景中得到它。我找到了itemAt 函数。但问题是我不知道const QTransformdeviceTransform 是什么。我应该为QTransform 使用什么?

因为我没有在QGraphicsItem 中实现任何转换。这让我很困惑。

【问题讨论】:

    标签: c++ qt qgraphicsitem qgraphicsscene


    【解决方案1】:
    QGraphicsItem * QGraphicsScene::itemAt ( const QPointF & position, const QTransform & deviceTransform ) const
    

    返回指定位置的最顶部可见项,如果返回则为 0 该位置没有项目。 deviceTransform 是 应用于视图的转换,如果需要,则需要提供 场景包含忽略变换的项目。这个功能 在 Qt 4.6 中引入。

    所以我想说,如果您需要转换某些项目而忽略其他项目,您可以简单地使用默认值 QTransform() 甚至更好的 QGraphicsView::transform() const

    苏长在

    【讨论】:

    • 请注意,QGraphicsScene 可以有多个视图。所以deviceTransform 的值取决于上下文。例如,在鼠标事件处理程序中,您必须确定事件来自哪个视图。见this comment
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多