2012-04-23 14 views
8

Muhtemelen bir hile sorusu, ancak cevabı bulamıyorum.QGraphicsItem seçildiğinde hangi yöntem çağrılır

Bir QGraphicsItem seçildiğinde bunu bilmem gerekiyor. Arayan bir yöntem olmalı.

Biliyorum QGraphicsItem::itemChange() ama çok sık denir.

Daha iyi bir yöntem var mı?

thx

düzenleme: iki çağrıyı her seçim değişiklik olsun bu

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

ile.

cevap

12

Sen QGraphicsItem :: itemChange yönteminde dikkate value almalıdır. Ne istediğiniz muhtemelen böyle bir şeydir:

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, bulduklarımdan daha iyi çalışır: eğer if içinde this & this.isSelected() öğesini ekleyin. –

0
+0

Sen üzerinde yineleme olurdu tüm [seçilen öğeleri] (http://qt-project.org/doc/qt-5/qgraphicsscene.html#selectedItems]) ve söz konusu olanları manuel olarak [seçilmiş] ayarlayınız (http://qt-project.org/doc/qt-5/qgraphicsitem.html#setSelected). – ssc

İlgili konular