2013-02-14 95 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