2013-02-14 8 views
0

부동 QDockWidget을 드래그 할 때 다른 마우스 커서를 사용할 수 있습니까? QWidget::setCursor 또는 QApplication::setOverrideCursor도 마찬가지입니다.부동 QDock 위젯을 드래그 할 때 마우스 커서를 변경하십시오.

+0

Qt 자체를 수정 하시겠습니까? 이 QDockWidget 기능을 Qt 5.1에 제공 할 수 있습니다. – peppe

+0

@peppe 재미있는 아이디어입니다. 나는 어떤 점에서 그것을 조사 할 것이고 실현 가능하다면 그것을 할 수는 있지만, 그것은 내가 현재 작업하고있는 프로젝트에 도움이되지 않을 것이다. –

+0

주 창에서 커서를 설정하면 어떻게됩니까? 상위 위젯에서 커서를 가져와야합니다. – paulm

답변

0

부동 QDockWidget은 창이므로 비 클라이언트 영역에있을 때 커서를 변경하도록 OS에 요청해야합니다.

창에 대한 약간의 버그 예 :

#define WINVER 0x0500 
#include <windows.h> 
#include <windowsx.h> 
#include <winuser.h> 
bool DockWidget::winEvent(MSG * message, long * result) 
{ 
    switch(message->message) 
    { 
     case WM_NCMOUSEMOVE: 
      if(message->wParam == HTCAPTION) 
      { 
       qDebug() << "WM_NCMOUSEMOVE"; 
       if(!cursorHasBeenChanged && !cursorHasBeenClosed) 
       { 
        cursorHasBeenChanged = true; 
        QApplication::setOverrideCursor(Qt::OpenHandCursor); 
       } 
      } 
      else 
       if(cursorHasBeenChanged) 
       { 
        cursorHasBeenChanged = false; 
        QApplication::restoreOverrideCursor(); 
       } 
      break; 
     case WM_NCMOUSELEAVE: 
      qDebug() << "WM_NCMOUSELEAVE"; 
      if(cursorHasBeenChanged && !cursorHasBeenClosed) 
      { 
       cursorHasBeenChanged = false; 
       QApplication::restoreOverrideCursor(); 
      } 
      break; 
     case WM_NCLBUTTONDOWN: 
      if(message->wParam == HTCAPTION) 
      { 
       qDebug() << "WM_NCLBUTTONDOWN"; 
       cursorHasBeenClosed = true; 
       QApplication::setOverrideCursor(Qt::ClosedHandCursor); 
      } 
      break; 
     case WM_NCLBUTTONUP: 
      qDebug() << "WM_NCLBUTTONUP"; 
      if(cursorHasBeenClosed) 
      { 
       cursorHasBeenClosed = false; 
       QApplication::restoreOverrideCursor(); 
      } 
      break; 
     default: 
      ; 
    } 

    return QDockWidget::winEvent(message, result); 
} 

나는 코드가 자명하다고 생각 byut 당신이 이해하지 않는 무언가가 있다면 주저하지 않습니다.

버그가있는 부분은 WM_NCLBUTTONUP 메시지를받지 못하고 왜 (WM_NCMOUSEMOVE가 아닌) WM_NCMOUSEHOVER (비 클라이언트 영역의 "이벤트 입력")인지 알지 못합니다.

+0

플랫폼에 무관 한 솔루션을 원했지만 아무 것도없는 것 같습니다. WM_NLCBUTTONUP을 결코 얻지 못하는 이유는 이전에 봤던 것입니다. 이미 문서화되어 있습니다. https://bugreports.qt-project.org/browse/QTBUG-1358 –