2012-04-23 19 views
8

Probabilmente una domanda trabocchetto, ma non riesco a trovare la risposta.Quale metodo viene chiamato quando viene selezionato un oggetto QGraphicsI

Ho bisogno di sapere quando viene selezionato un oggetto QGraphics. Deve esserci un metodo che viene chiamato.

Conosco QGraphicsItem::itemChange() ma si chiama troppo spesso.

Esiste un metodo migliore?

thx

edit: Con questo

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

ricevo due chiamate ogni cambio di selezione.

risposta

12

Si dovrebbe prendere in considerazione value nel metodo QGraphicsItem :: itemChange. Ciò che si vuole è probabilmente qualcosa di simile:

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 Funziona meglio di quello che ho trovato: aggiungi && this.isSelected() nel if. –

0
+0

Avresti per iterare su tutti [gli elementi selezionati] (http://qt-project.org/doc/qt-5/qgraphicsscene.html#selectedItems]) e impostare manualmente quelli in questione [selezionati] (http://qt-project.org/doc/qt-5/qgraphicsitem.html#setSelected). – ssc

Problemi correlati