2014-10-06 4 views

답변

2

이것은 항목의 플래그에 의해 제어됩니다. 특정 항목에 대한 선택을하지 않으려면, 당신은 completly에 관계없이 항목 플래그의 QGraphicsScene에 대한 해제 선택 항목이 내가 QGraphicsScene::clearSelectionQGraphicsScene::selectionChanged를 연결하는 것이 좋습니다하려면

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

을한다.

  • 서브 클래스 QGraphicsScene 및 QGraphicsScene::selectionChanged
  • 확인 selectedItems에 연결 슬롯을 만들기
  • 주위에 QGraphicsItem에 대한 포인터 lastSelection을 유지 : : 여러 선택을 비활성화하려면

    나는 다음과 같은 제안

    • 비어 있습니다. 할 일 없음 (= 아무것도 선택하지 않음)
    • cont
    • 하지 lastSelection 하나 개의 항목을 포함합니다 (= 선택은 정말 변경하지 않은) 아무것도 할 것이 없습니다 : AINS 만 lastSelection (처음 선택 = 하나 개의 항목) 해당 항목에 lastSelection을 설정
    • 이 두 항목이 포함되어 하나 개해야합니다 lastSelection이되어야합니다. 선택 항목 (lastSelection->setSelected(false);)에서 해당 항목을 제거하고 lastSelection을 나머지 항목으로 설정하십시오.

넌 슬롯 내부의 선택을 수정하는 동안 신호를 차단해야 (다른 아이템을 선택하기 = 그것에 선택 ​​이동). 다중 선택을 해제 할

+0

안녕하세요,하지만 난 여전히 일반 선택 능력을 유지하려면, 난 단지 ... – Nyaruko

+0

내 편집 대답을 참조 여러 선택을 해제 할 . – dom0

+0

답변 해 주셔서 감사합니다. – Nyaruko

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... 
         } 
        } 
    
관련 문제