Я реализую интерфейс перетаскивания с Qt через X11 и Windows . Интерфейс обрабатывает события так, что для пользователя не является незаконным перетаскивание перетаскиваемого объекта в область, которая не может обработать отбрасывания.
В этом случае Qt::IgnoreAction
, следовательно, , а не следует рассматривать как неправильное потенциальное действие. Чтобы сообщить об этом факте пользователю, мне нужен способ остановить отображение Qt::ForbiddenCursor
, если текущий Qt::DropAction
равен Qt::IgnoreAction
.
Есть три способа добиться этого (в порядке предпочтения):
- Для переопределения
QCursor
, используемого для перетаскивания с Qt::IgnoreAction
, на что-то отличное от Qt::ForbiddenCursor
.
- Переопределить растровое изображение, используемое для
Qt::ForbiddenCursor
. Это довольно грязно, но было бы приемлемым решением, если бы мне не приходилось копаться в конкретной конфигурации ОС.
- Чтобы переопределить вызов, сделанный Qt, когда перетаскивание покидает допустимую область перетаскивания (я предполагаю, что Qt делает эквивалент
QDropEvent::setDropAction(Qt::IgnoreAction)
в этом случае).
Кто-нибудь может предложить способы достижения чего-либо из перечисленного?
Примечание: Я также пытался использовать QApplication::setOverrideCursor()
непосредственно перед вызовом QDrag::exec()
. Это, кажется, не имеет никакого эффекта.