【问题标题】:How can I stop Qt::ForbiddenCursor from appearing during a drag?如何阻止 Qt::ForbiddenCursor 在拖动过程中出现?
【发布时间】:2011-12-09 14:44:28
【问题描述】:

我正在 X11Windows 上使用 Qt 实现拖放界面。该界面处理事件,因此用户将拖动的对象拖放到无法处理拖放的区域不是非法的。

在这种情况下,Qt::IgnoreAction 因此不应被视为不正确的潜在操作。为了向用户传达这个事实,如果当前的Qt::DropActionQt::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


【解决方案1】:

检查QDragEnterEvent 是否进入应用程序本身(在QApplication 对象上安装事件过滤器)。如果是,只需接受它,光标就会正常显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2022-12-16
    • 2013-08-05
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多