2012-12-24 25 views
11

Creo un utente QGraphicsItem. E sovrascrivere lo boundingRect() e paint().qual è il qtransform in 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); 
} 

Quindi utilizzare addItem() per aggiungere un elemento a una scena. Ora voglio ottenerlo dalla scena dalla sua posizione. Trovo la funzione itemAt. Ma il problema è che non so quale sia lo const QTransform & deviceTransform. Cosa dovrei usare per lo QTransform?.

Perché non ho implementato alcuna trasformazione nello QGraphicsItem. Questo mi confonde.

risposta

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

Ritorna la voce visibile nella posizione specificata, o 0 se non ci sono articoli in questa posizione. deviceTransform è la trasformazione che si applica alla vista e deve essere fornita se la scena contiene elementi che ignorano le trasformazioni. Questa funzione è stata introdotta in Qt 4.6.

Quindi, direi che, se avete la necessità di trasformare alcuni oggetti e ignorare gli altri, si può semplicemente andare con il valore predefinito di QTransform() o meglio ancora il QGraphicsView::transform() const.

soo lungo zai

+0

mente però che un QGraphicsScene può avere più di una vista. Quindi il valore di 'deviceTransform' dipende dal contesto. Ad esempio, in un gestore di eventi del mouse dovresti capire da quale vista proviene l'evento. Vedi [questo commento] (http://stackoverflow.com/questions/16919819/itemat-not-returning-custom-qgraphicsitem#comment24426364_16921083). –