2012-04-23 19 views
8

Probablemente sea una pregunta engañosa, pero no puedo encontrar la respuesta.¿Qué método se usa cuando se selecciona un QGraphicsItem?

Necesito saber cuándo se selecciona un QGraphicsItem. Debe haber un método que se llame.

QGraphicsItem::itemChange() pero se llama con demasiada frecuencia.

¿Existe un método mejor?

THX

edición: Con esta

if(change == ItemSelectedChange && scene()){ 
    cout << "haha " << i++ << endl; 
} 

consigo dos llamadas cada cambio de selección.

Respuesta

12

Debe tomar en consideración value en el método QGraphicsItem :: itemChange. Lo que queremos es probablemente algo como esto:

QVariant YourItem::itemChange(GraphicsItemChange change, const QVariant &value) 
{ 
    if (change == QGraphicsItem::ItemSelectedChange) 
    { 
     if (value == true) 
     { 
      // do stuff if selected 
     } 
     else 
     { 
      // do stuff if not selected 
     } 
    } 

    return QGraphicsItem::itemChange(change, value); 
} 
+0

Thx Funciona mejor que lo que encontré: agrega && this.isSelected() en if. –

0
+0

Habría que iterar sobre todos [los elementos seleccionados] (http://qt-project.org/doc/qt-5/qgraphicsscene.html#selectedItems]) y configure manualmente los que están en cuestión [seleccionados] (http://qt-project.org/doc/qt-5/qgraphicsitem.html#setSelected). – ssc

Cuestiones relacionadas