2012-12-24 29 views
11

Tworzę niestandardowy QGraphicsItem. Zastąp także boundingRect() i paint().co to jest qtransform w QGraphicsScene :: itemAt()

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); 
} 

Następnie używam addItem(), aby dodać element do sceny. Teraz chcę dostać to ze sceny przez jego pozycję. Znajduję funkcję itemAt. Ale problem polega na tym, że nie wiem, co to jest const QTransform & deviceTransform. Co powinienem użyć dla QTransform?

Ponieważ nie zaimplementowałem żadnej transformacji w QGraphicsItem. To mnie myli.

Odpowiedz

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

Zwraca najwyższą widoczny element w określonym położeniu, lub 0 jeśli nie ma żadnych przedmiotów w tej pozycji. deviceTransform to transformacja , która ma zastosowanie do widoku i musi być pod warunkiem, że scena zawiera elementy, które ignorują transformacje. Ta funkcja została wprowadzona w Qt 4.6.

Więc chciałbym powiedzieć, jeśli masz potrzebę przekształcenia niektórych elementów i ignorowania innych, można po prostu iść z domyślnej wartości QTransform() lub nawet lepsza QGraphicsView::transform() const.

soo long zai

+0

Pamiętaj, że QGraphicsScene może mieć więcej niż jeden widok. Tak więc wartość 'deviceTransform' zależy od kontekstu. Na przykład w programie obsługi zdarzeń myszy trzeba się dowiedzieć, z którego widoku pochodzi wydarzenie. Zobacz [ten komentarz] (http://stackoverflow.com/questions/16919819/itemat-not-returning-custom-qgraphicsitem#comment24426364_16921083). –