2013-02-14 91 views
0

拖动浮动时可以使用不同的鼠标光标QDockWidgetQWidget::setCursorQApplication::setOverrideCursor都没有任何影响。当拖动浮动时更改鼠标光标QDockWidget

+0

你愿意修改Qt本身吗?你可以将这个QDockWidget特性贡献给Qt 5.1。 – peppe 2013-02-18 10:58:46

+0

@peppe这是一个有趣的想法。我会在某个时候研究它,如果可行的话,我可能会这样做,但这对我现在正在开展的项目无能为力。 – 2013-02-18 12:54:13

+0

如果在主窗口上设置了光标,会发生什么情况?它应该从其父部件获取光标。 – paulm 2013-02-23 00:20:33

回答

0

浮动QDockWidget是一个窗口,因此您需要让操作系统在非客户端区域更改光标。

一个用于Windows的小马车例如:

#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不要犹豫,问是否有东西,你不明白。

Buggy的一部分,是我从来没有收到WM_NCLBUTTONUP消息,我不知道为什么(我得到WM_NCMOUSEMOVE而不是)WM_NCMOUSEHOVER(这是非客户区“输入事件”)。

+0

我希望有一个平台不可知的解决方案,但似乎没有。你从来没有得到WM_NLCBUTTONUP的原因是我之前遇到的,并且发现它已经被记录:https://bugreports.qt-project.org/browse/QTBUG-1358 – 2013-02-21 17:46:39