2014-10-06 267 views

回答

2

這由項目的標誌控制。要禁用選擇特定項目,請

item->setFlag(QGraphicsItem::ItemIsSelectable, false); 

如果你想完全地禁用了QGraphicsScene不管項目標誌的選擇項目我建議QGraphicsScene::selectionChanged連接到QGraphicsScene::clearSelection

如果要禁用多項選擇,我建議如下:

  • 子類QGraphicsScene和保持一個指針lastSelection到的QGraphicsItem左右
  • 創建連接到QGraphicsScene::selectionChanged
  • 檢查selectedItems插槽:
    • 它是空的:無所事事(=沒有選擇)
    • cont AINS只有lastSelection:沒事幹(=選擇並沒有真正改變)
    • 包含了一個項目,而不是lastSelection:設置lastSelection到(選擇首次=一個項目),該項目
    • 包含兩個項目:一根絕是lastSelection。從選擇中刪除一個(lastSelection->setSelected(false);),將lastSelection設置爲剩餘項目。 (=選擇另一個項目時,移動選擇到它)

您可能需要修改所述插槽內的選擇期間以阻止信號。

+0

嗨,但我還是想保持正常的選擇能力,我只想禁用多項選擇... – Nyaruko 2014-10-07 06:21:38

+0

看到我的編輯答案。 – dom0 2014-10-07 08:39:29

+0

感謝您的回答。 – Nyaruko 2014-10-07 13:50:50

1

禁用多項選擇最簡單的方法是:

  1. QGraphicsItem創建您自己的Dirived類。
  2. 超載保護mousePressEvent功能和禁用ControlModifier

    protected: 
        void YourOwnQGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) Q_DECL_OVERRIDE 
        { 
         if(mouseEvent->modifiers() & Qt::ControlModifier) 
         { 
          mouseEvent->ignore(); 
         } 
         else 
         { 
          QGraphicsItem::mousePressEvent(mouseEvent); 
          //Do what you want... 
         } 
        }