2012-04-23 25 views
8

Prawdopodobnie podchwytliwe pytanie, ale nie mogę znaleźć odpowiedzi.Jaka metoda jest wywoływana, gdy wybrano QGraphicsItem?

Potrzebuję wiedzieć, kiedy zostanie wybrany element QGraphicsItem. Musi istnieć metoda, która jest wywoływana.

Znam QGraphicsItem::itemChange(), ale to się nazywa zbyt często.

Czy istnieje lepsza metoda?

thx

edit: Z tego

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

mam dwa połączenia każda zmiana wybór.

Odpowiedz

12

Należy wziąć pod uwagę value w metodzie QGraphicsItem :: itemChange. Co chcesz to chyba coś takiego:

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 Działa lepiej niż to, co znalazłem: add && this.isSelected() w if. –

0
+0

Trzeba iteracyjne nad wszystko [wybrane pozycje] (http://qt-project.org/doc/qt-5/qgraphicsscene.html#selectedItems]) i ręcznie ustawić te, o których mowa [wybrane] (http://qt-project.org/doc/qt-5/qgraphicsitem.html#setSelected). – ssc

Powiązane problemy