2012-04-23 126 views
8

可能是個詭異的問題,但我找不到答案。當QGraphicsItem被選中時,調用什麼方法

我需要知道什麼時候QGraphicsItem被選中。必須有一個被調用的方法。

我知道QGraphicsItem::itemChange(),但它被稱爲太頻繁。

有沒有更好的方法?

THX

編輯:有了這個

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

我得到兩個電話每一個選擇的變化。

回答

12

你應該採取value考慮在的QGraphicsItem :: itemChange方法。你想要的可能是這樣的:

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比我發現的更好:在if中添加&& this.isSelected()。 – 2012-04-23 21:14:36

0
+0

你必須迭代所有[選定的項目](http://qt-project.org/doc/qt-5/qgraphicsscene.html#selectedItems] )並手動設置問題[選中](http://qt-project.org/doc/qt-5/qgraphicsitem.html#setSelected)。 – ssc 2014-10-14 20:34:46

相關問題