12

我创建了一个自定义QGraphicsItem. 并覆盖boundingRect()and 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 QTransform&是什么deviceTransform。我应该使用什么QTransform

因为我没有在QGraphicsItem. 这让我很困惑。

4

1 回答 1

5
QGraphicsItem * QGraphicsScene::itemAt ( const QPointF & position, const QTransform & deviceTransform ) const

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

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

苏龙仔

于 2012-12-25T13:55:25.990 回答