Qt 拖动浮动QDockWidget时更改鼠标光标
拖动浮动Qt 拖动浮动QDockWidget时更改鼠标光标,qt,qt4,mouse-cursor,qdockwidget,Qt,Qt4,Mouse Cursor,Qdockwidget,拖动浮动QDockWidget时,是否可以使用不同的鼠标光标?无论是QWidget::setCursor还是QApplication::setoverridecursors都没有任何效果。浮动QDockWidget是一个窗口,因此当光标位于非客户端区域时,您需要要求操作系统更改光标 windows的一个小错误示例: #define WINVER 0x0500 #include <windows.h> #include <windowsx.h> #include <w
QDockWidget
时,是否可以使用不同的鼠标光标?无论是QWidget::setCursor
还是QApplication::setoverridecursors
都没有任何效果。浮动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);
}
#定义WINVER 0x0500
#包括
#包括
#包括
bool DockWidget::winEvent(消息*消息,长*结果)
{
开关(消息->消息)
{
case WM\u NCMOUSEMOVE:
如果(消息->wParam==HTCAPTION)
{
qDebug()您愿意修改Qt本身吗?您可以将此QDockWidget功能添加到Qt 5.1中。@peppe这是一个有趣的想法。我会在某个时候进行研究,如果可行,我可能会这样做,但这对我现在正在进行的项目没有帮助。如果您在主窗口上设置光标,会发生什么?它应该从其父窗口widg获取光标等。我希望有一个平台无关的解决方案,但似乎没有。你从来没有得到WM_NLCBUTTONUP的原因是我以前遇到过,发现它已经被记录在案: