2011-05-24 14 views
1

我正在創建一個應用程序,並且我遇到了問題。Qt QGraphicsScene如何區分select和unSelect信號?

我有一個qgraphics場景。 我創建場景,並且當用戶在場景項目上單擊 時,我會執行一些操作。

我可以檢測selectionChanged()信號,但是:

  1. 的信號被髮射兩次(一次用於點擊的項目,一次用於先前選擇的項目(取消選擇),所以需要採取的行動發生兩次兩個項目)。

  2. 當用戶點擊一個項目,它保持選中狀態,我不能再單擊它... (我試過設置item->setSelected(false)但在選擇/取消的無限循環獲取...)。

任何人有任何想法如何解決呢?

我想實現的目標是在取消選擇時不執行任何操作, 並且能夠重新點擊單擊的項目並重新執行操作。

回答

1

定義一個插槽yourSlot()並將其連接到信號selectionChanged()。在此插槽中,您檢查是否選擇了負責信號發射的項目。

void yourSlot() { 
    QGraphicsItem *item = qobject_cast<QGraphicsItem *>(sender()); 

    if (item) { 
     if (item->isSelected()) { //this item is selected 
     doSomethin(); 

     //*deselect* the item so that it can be selected again 
     item->setSelected(false); 
     } 
     else { //the signal was fired because the item was deselected 
     //ignore() 
     } 
    } 
} 

我現在不能嘗試,因爲我沒有在這臺計算機上安裝Qt,我認爲它應該可以工作。

+0

我試過了,但它進入了無限循環......似乎'item-> setSelected(false)'激發了一個新信號 並且似乎選擇了相同的項目......我沒有知道...在我的代碼中發生了一些奇怪的事情:(無論如何回答... – 2011-05-25 10:57:26