부동 QDockWidget
을 드래그 할 때 다른 마우스 커서를 사용할 수 있습니까? QWidget::setCursor
또는 QApplication::setOverrideCursor
도 마찬가지입니다.부동 QDock 위젯을 드래그 할 때 마우스 커서를 변경하십시오.
0
A
답변
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 –
Qt 자체를 수정 하시겠습니까? 이 QDockWidget 기능을 Qt 5.1에 제공 할 수 있습니다. – peppe
@peppe 재미있는 아이디어입니다. 나는 어떤 점에서 그것을 조사 할 것이고 실현 가능하다면 그것을 할 수는 있지만, 그것은 내가 현재 작업하고있는 프로젝트에 도움이되지 않을 것이다. –
주 창에서 커서를 설정하면 어떻게됩니까? 상위 위젯에서 커서를 가져와야합니다. – paulm