Можно ли использовать другой курсор мыши при перетаскивании плавающего QDockWidget
? Ни QWidget::setCursor
, ни QApplication::setOverrideCursor
не имеют никакого эффекта.Изменение указателя мыши при перетаскивании плавающего QDockWidget
ответ
Плавающее окно QDockWidget
- это окно, поэтому вам нужно попросить ОС изменить курсор, когда он находится на неклиентской области.
Небольшой пример багги для окон:
#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);
}
Я думаю, что код не требует пояснений, бет, не стесняйтесь спросить, если что-то вы не понимаете.
Ошибка в том, что я никогда не получаю сообщения WM_NCLBUTTONUP, и я не знаю, почему (вместо этого я получаю WM_NCMOUSEMOVE) ни WM_NCMOUSEHOVER (что является «событием ввода» для неклиентской области).
Я надеялся на платформо-агностическое решение, но, похоже, его нет. Причина, почему вы никогда не получаете WM_NLCBUTTONUP, - это то, с чем я столкнулся раньше, и обнаружил, что он уже задокументирован: https://bugreports.qt-project.org/browse/QTBUG-1358 –
- 1. Изменение указателя мыши при перетаскивании в HTML
- 2. Qt: изменение указателя мыши при перетаскивании
- 3. Изменение указателя мыши при нажатии
- 4. изменение изображения coffeescript при наведении указателя мыши
- 5. Изменение указателя мыши при вызове ajax
- 6. Изменение класса при наведении указателя мыши на
- 7. Изменение курсора при перетаскивании
- 8. Ограничить движение мыши при перетаскивании
- 9. Изменение скорости поиска указателя мыши/указателя SeekBar
- 10. при наведении указателя мыши/мыши
- 11. Изменение указателя мыши в Silverlight
- 12. Изменение указателя мыши на зависание
- 13. Изменение указателя мыши на виджет
- 14. Автоматическое изменение размера содержимого QDockWidget
- 15. QDockWidget autohide при запуске
- 16. Изменение указателя мыши на границе компонента
- 17. Изменение указателя мыши на мыши и получить обратно на выпуск
- 18. Изменение текста с изменением положения указателя мыши?
- 19. jQuery - Получить положение мыши при перетаскивании ссылки
- 20. Hover div мерцает при перетаскивании мыши над
- 21. WinForm: поле выбора мерцает при перетаскивании мыши
- 22. Можно ли использовать колесико мыши при перетаскивании?
- 23. Нарисуйте линию на Jpanel при перетаскивании мыши
- 24. Получить реальное смещение мыши при перетаскивании
- 25. Блокировка курсора мыши при перетаскивании в Chrome
- 26. CSS: изменение фона при наведении указателя мыши на содержимое
- 27. Изменение значка курсора при наведении указателя мыши на кнопку
- 28. Изменение расположения элемента при наведении указателя мыши на элемент меню
- 29. Как вызвать изменение состояния при наведении указателя мыши на элемент
- 30. CSS: Изменение цвета ребенка при наведении указателя мыши на родителя
Готовы ли вы изменить Qt? Вы можете внести вклад в эту функцию QDockWidget в Qt 5.1. – peppe
@peppe Это интересная идея. Я рассмотрю его в какой-то момент, и если это осуществимо, я могу это сделать, но это не поможет мне в проекте, над которым я сейчас работаю. –
Что произойдет, если вы установите курсор в главном окне? Он должен получить курсор из своего родительского виджета. – paulm