我正在 X11 和 Windows 之间使用 Qt 实现拖放界面 . 该接口处理事件,使得用户将拖动的对象放在无法处理掉落的区域上是非法的 .
在这种情况下,Qt::IgnoreAction因此应被视为不正确的潜在行动 . 要将此事实传达给用户,我需要一种方法来阻止Qt::ForbiddenCursor显示当前 Qt::DropAction
是 Qt::IgnoreAction
.
我可以通过三种方式实现这一目标(按优先顺序排列):
-
要覆盖QCursor用于拖动
Qt::IgnoreAction
到Qt::ForbiddenCursor
以外的其他内容 . -
覆盖用于
Qt::ForbiddenCursor
的位图 . 这很脏,但只要我不必深入研究特定于操作系统的配置,这将是一个可接受的解决方案 . -
当拖动离开有效的拖放区域时覆盖Qt的调用(我假设在这种情况下Qt相当于
QDropEvent::setDropAction(Qt::IgnoreAction)
) .
任何人都可以建议如何实现上述任何一项?
Note: 我在调用 QDrag::exec()
之前也试图使用 QApplication::setOverrideCursor()
. 这似乎没有任何影响 .
1 回答
检查
QDragEnterEvent
是否来自应用程序本身(在QApplication
对象上安装事件过滤器) . 如果是,只需接受它,光标就会显示正常 .