이전 시간에 이어 마우스를 움직일 때 마다 커서의 위치를 출력해 보도록 하겠습니다. 이번에 이용할 멤버함수는 virtual void mouseMoveEvent ( QMouseEvent * eve ) 입니다.

예제로 폼 위에 마우스를 이동하면, 계속 마우스의 좌표 값을 출력해 보도록 하겠습니다.

프로젝트 파일과 frmMain을 생성하는 방법은 이전 "QT - 마우스 클릭 이벤트 처리" 글과 같아, 변경하는 부분만 넣으려 했습니다만, 작성해 놓고 보니 오히려 읽기가 불편하여 작없 순서대로 차례로 올렸습니다.

폼의 마우스 이동 이벤트 처리

  1. 프로제트 파일 생성, "C++ Project"를 선택합니다.


  2. 적당한 프로젝트 이름을 입력합니다.


  3. 프로젝트 파일을 저장합니다.


  4. 폼 이름을 지정합니다. 이 이름이 클래스 이름이 되므로 적당한 이름을 지정해 줍니다. 여기서는 frmMain으로 입력하겠습니다.


  5. 마우스의 위치를 출력하기 위해 TextLabel 2개를 배치합니다.


  6. Object Explorer >> Members 탭 >> Functions 에서 적당한 접근자를 마우스 오른쪽 버튼으로 클릭한 후 New 메뉴를 클릭합니다.

    함수 이름 부분에 mouseMoveEvent( QMouseEvent * eve ) 라고 입력합니다.



  7. 그러면 아래와 같이 함수가 등록됩니다.


  8. 이제 생성된 함수를 클릭하면 코드를 입력할 수 있습니다.


  9. 아래와 같이 코드를 입력합니다.
void frmMain::mouseMoveEvent( QMouseEvent * eve )
{
   QPoint position = eve->pos();
   
   labX->setNum( position.x() ); 
   labY->setNum( position.y() );   
}
  1. 폼을 프로젝트 파일이 있는 곳에 저장합니다.


  2. File 메뉴 >> New를 선택하고 C++ Main File을 선택합니다.


  3. 메인 폼을 선택 윈도우에서 frmMain을 선택합니다.

  4. 이제 모든 파일을 저장한 후 빌드하면됩니다.
]$ qmake
]$ make
  1. 프로그램을 실행하고 마우스를 폼 위에서 움직여 보십시오.
    마우스가 움질일 때 마다 숫자가 바뀌나요?

안되는데....--

직접 해 보시면 안될 것입니다. 이유는 mouseMoveEvent( QMouseEvent * eve )의 특징이 폼의 속성 중 mouseTracking과 관련되어 있기 때문입니다. mouseTracking 속성이 off 되어 있을 때에는 마우스 버튼 중 어느 하나라도 눌려 있어야 mouseMoveEvent()가 호출됩니다.

지금 바로 마우스 버튼 어느 하나를 누르신 상태에서 움직여 보십시오. 라벨의 숫자가 바뀌지요.

그럼 버튼의 눌림과 관계없이 출력하려면? 네, mouseTracking 속성을 True로 바꾸셔야 합니다.

 

태그: *QT *그래픽