【问题标题】:Differentiate between Ctrl+Click and Right Click in QtQt中Ctrl+Click和Right Click的区别
【发布时间】:2019-02-23 20:08:06
【问题描述】:

我目前通过 QML 中的 MouseArea 接收鼠标事件。我可以区分鼠标左键、右键和中键。在 Mac 上,按住 Control 和 Left Clicking 被解释为 Qt.RightButton 按下。无论如何要区分标准的右键单击和(Ctrl + 左)右键单击吗?我需要这样做来处理自定义 UI 交互(我知道这是一种反模式)。

注意:特别是,我需要区分 Ctrl + 左键单击和 Ctrl + 右键单击​​。因此,仅检测在接收到右键单击事件时按下 Control 是不够的。

function button( mouse )
    {
        if( mouse.button == Qt.LeftButton )
        {
            console.log("left button is pressed");
            return 0;
        } else if( mouse.button == Qt.MidButton )
        {
            console.log("mid button");
            return 1;
        } else if ( mouse.button == Qt.RightButton )
        {
            console.log("right button pressed");
        }
 }

【问题讨论】:

标签: macos qt qml


【解决方案1】:

在 Mac 上,按住 Control 和左键单击以执行右键单击是系统设置,并且是用户的选择 - 它与 Qt 无关,并且尝试检测它会破坏您的应用程序,因为用户取决于 Ctrl+Left 在任何地方都充当 Right ,并且您有 0 个理由来更改它 - 就像阻止用户使用 0 个理由一样全局交换左右按钮(独立且对您的应用程序未知)等。

您需要的思维模式是 Ctrl+Left 在默认的 Mac 系统上不可用,实际上:为什么会这样?如果跨平台应用程序在 Windows 上使用 Ctrl+Left/Right,我完全希望它在 Mac 上使用 Cmd+Left/Right,如果它做其他事情会很困惑。 Windows/Unix 上的 Ctrl 变成 Mac 上的 Cmd - 这是每个人都期望的,这就是 Mac 上一切的本质。这就是你想要的——然后就没有问题了。

【讨论】:

  • 虽然我完全同意你所说的一切,但我试图理解的思维模式如下:假设你正在开发一个碰巧使用 Ctrl+ 的遗留应用程序左键单击在 mac 上进行了多年的一些自定义 UI 交互(这样的应用程序确实存在)。您现在希望保持这种行为,尽管为了用户的一致性而实施了这种反模式的“罪行”。
  • 您确定那些应用程序使用了 Ctrl+Click 吗?请记住,这种骚动的全部原因是 Mac 曾经有一个单键鼠标,带有一个主按钮,而 Ctrl+primary 则提供了次要按钮。然后,当添加更多按钮时,主按钮变为左按钮,辅助按钮变为右按钮。我猜该应用程序在 2000 年代初期还没有在 Mac 上使用,因为如果它还用于同一目标上的辅助按钮,则无法使用它 - 除非您将其解释为 Ctrl+left 确实是辅助按钮,并且仅记录为“Ctrl+left”。
猜你喜欢
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多