Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 拖动浮动QDockWidget时更改鼠标光标_Qt_Qt4_Mouse Cursor_Qdockwidget - Fatal编程技术网

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的原因是我以前遇到过,发现它已经被记录在案: