2012-06-23 4 views
4

나는 Qt를 사용하고 마우스로 어떤 객체를 움직이고 싶다. 예를 들어, 사용자는 오브젝트를 클릭하고이 오브젝트를 다른 창 위치로 드래그합니다. 내가 어떻게 할 수 있니?마우스로 움직이는 객체

void QDropLabel::mouseMoveEvent(QMouseEvent *ev) 
{ 
    this->move(ev->pos()); 
} 

하지만 불행히도 객체 이동 아주 이상한 방법 :

나는 mouseMoveEvent을 시도했다. 그것은 장소에서 장소로 점프.

QDropLabel은 QLabel을 상속합니다. 또한 pixmap을 제공합니다. 다른 개체를 사용하여 시도했지만 결과가 동일합니다.

+1

마우스 이동 이벤트는 "마우스를 끌고 있습니다"가 아니라 말 그대로 마우스 (커서)가 이동했습니다. 어떻게 든 '끌기'를 잡아야합니다. 또한 ev-> pos는 위젯에 상대적 일 수 있습니다. –

+0

드래그 앤 드롭에 사용하지 않으려합니다. 난 그냥 마우스를 사용하여 개체를 이동하고 싶습니다. – LosYear

+1

좋아,하지만 개체가 커서를 따라 이동하거나 움직일 수있게하려는 경우 –

답변

16

이동식 위젯은 QPoint offset 명의 회원이어야합니다. 그냥 좌표계 부모에 위젯을 이동 마우스 이동 이벤트에

void DropLabel::mousePressEvent(QMouseEvent *event) 
{ 
    offset = event->pos(); 
} 

: 그것은 위젯의 왼쪽 상단 모서리에 커서를 클릭 상대의 위치를 ​​저장합니다. 커서 위치에서 offset을 빼지 않으면 위젯이 '점프'하므로 왼쪽 상단이 커서 바로 아래에있게됩니다.

void DropLabel::mouseMoveEvent(QMouseEvent *event) 
{ 
    if(event->buttons() & Qt::LeftButton) 
    { 
     this->move(mapToParent(event->pos() - offset)); 
    } 
} 
+0

고맙습니다. 그것의 작품 – LosYear