Qt의 다른 컨테이너에 드래그 앤 드롭 위젯을 구현하는 방법은 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com//questions/20002566

  •  20-12-2019
  •  | 
  •  

문제

여러 컨테이너가 있는 창이 있습니다.그들 사이에 드래그 앤 드롭을 구현하는 가장 간단한 방법은 무엇입니까?

도움이 되었습니까?

해결책

당신은 QDrag* 물체.그런 다음 다시 구현하십시오.

virtual void mousePressEvent(QMouseEvent * event);
virtual void mouseReleaseEvent(QMouseEvent * event);
virtual void mouseMoveEvent(QMouseEvent *event);

해당 이벤트 내에서 시작점(드래그가 시작되는 위치)과 종료점(위젯을 드롭하는 위치)을 관리하게 됩니다.또한 MIME 프로토콜을 사용하여 프레임워크가 드래그 앤 드롭 작업을 관리하도록 허용합니다.

드래그 앤 드롭에 대한 더 유용한 기사는 다음과 같습니다. 드래그 앤 드롭

다른 팁

가장 쉬운 방법은 다음을 만드는 것입니다. eventFilter 드래그 앤 드롭 이벤트를 필터링하는 클래스 설치하다 그것 (someWidget->installEventFilter)를 드래그 앤 드롭하려는 모든 위젯에 추가하세요.문서의 예 - 여기

업데이트:

eventfilter의 장점은 드래그 앤 드롭이 가능하도록 모든 위젯을 하위 클래스로 분류할 필요가 없다는 것입니다.DND 필터를 사용하려는 위젯에 필터를 설치하면 해당 위젯이 적용됩니다.

필터 자체는 항상 이벤트 등을 차단하는 것은 아닙니다(만약 의도했다면 그렇게 할 것입니다).그것은 단지 그것을 어떻게 사용할 수 있는지 보여주는 예시일 뿐입니다.

드래그 앤 드롭이 가능한 수많은 옵션 중 하나:dropEvent, dragMoveEvent, dragEnterEvent에서 필터는 드롭하려는 항목에 대한 포인터를 기억하고 dropEvent에서 개체와 함께 신호를 방출합니다. 해당 이벤트는 포인터를 보유하고 드롭한 위젯으로 이를 포착합니다. 그게 바로 모든 위젯입니다. 설치된 필터에는 드래그 앤 드롭이 있습니다.

이벤트 필터의 요점은 공통 이벤트 유형이 있고 예를 들어 드래그 앤 드롭 이벤트와 같이 유사한 방식으로 포착하고 처리하려는 경우 모든 단일 위젯을 서브클래싱하고 연결하는 데 방해가 되지 않습니다.

나는 여러분이 드래그 앤 드롭 방법을 알고 있다고 가정했지만, 동일한 코드를 사용하여 모든 위젯의 이벤트를 계속해서 무시하는 것은 그렇게 옳지 않을 수 있다고 생각했습니다.그래서 드래그 앤 드롭하려는 모든 위젯에 대해 하나의 이벤트 필터를 사용하여 쉽게 수행할 수 있는 방법을 보여 드렸습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top