Как я могу остановить появление Qt :: ForbiddenCursor во время перетаскивания? - PullRequest
2 голосов
/ 09 декабря 2011

Я реализую интерфейс перетаскивания с 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(). Это, кажется, не имеет никакого эффекта.

1 Ответ

0 голосов
/ 15 декабря 2011

Проверьте, приходит ли QDragEnterEvent к самому приложению (установите фильтр событий на объект QApplication). Если это так, просто примите его, и курсор будет выглядеть нормально.

...