【发布时间】:2011-12-09 14:44:28
【问题描述】:
我正在 X11 和 Windows 上使用 Qt 实现拖放界面。该界面处理事件,因此用户将拖动的对象拖放到无法处理拖放的区域不是非法的。
在这种情况下,Qt::IgnoreAction 因此不应被视为不正确的潜在操作。为了向用户传达这个事实,如果当前的Qt::DropAction 是Qt::IgnoreAction,我需要一种方法来阻止Qt::ForbiddenCursor 显示。
我可以看到三种方法来实现这一点(按优先顺序):
- 使用
Qt::IgnoreAction将用于拖动的QCursor覆盖为Qt::ForbiddenCursor以外的其他内容。 - 覆盖用于
Qt::ForbiddenCursor的位图。这很脏,但只要我不必深入研究特定于操作系统的配置,这是一个可以接受的解决方案。 - 当拖动离开有效放置区域时覆盖 Qt 发出的调用(我假设 Qt 在这种情况下相当于
QDropEvent::setDropAction(Qt::IgnoreAction))。
任何人都可以提出实现上述任何一项的方法吗?
注意:我还尝试在调用QDrag::exec() 之前使用QApplication::setOverrideCursor()。这似乎没有任何效果。
【问题讨论】:
-
只是好奇,但为什么要欺骗用户?
-
检查 QDragEnterEvent 是否到达应用程序本身(在 QApplication 对象上安装事件过滤器)。如果是,只需接受它,光标就会正常显示
-
好喊卡米尔,当你想到它时,一个明显的解决方案......我刚刚测试过,这将完成这项工作。它有点脏,但它有效!如果我没有听到任何其他建议,请将其作为答案提交,以便我奖励赏金。顺便说一句,“欺骗用户”是什么意思?
-
那么您欺骗用户允许此操作(将执行操作)但它不会?或者,也许您想“过滤”这个放置事件并执行一些操作?
标签: qt qt4 drag-and-drop x11