【问题标题】:Shortcut active when modal dialog is active当模态对话框处于活动状态时,快捷方式处于活动状态
【发布时间】:2019-09-16 09:12:33
【问题描述】:

我有一个带有两个菜单项的 QML 应用程序:

  • 文件/打开...触发打开文件模式对话框
  • Control/Up 只是在输出控制台上记录一些东西。此项目具有向上箭头键盘快捷键关联。

奇怪的是,显示打开文件对话框时,快捷方式仍然处于活动状态。例如,由于快捷方式绑定到另一个操作,因此无法使用向上箭头选择给定文件。

在常规的 Qt 小部件应用程序中,当模式对话框出现在屏幕上时,不会处理菜单快捷方式。

import QtQuick 2.12
import QtQuick.Window 2.12
import Qt.labs.platform 1.1

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    FileDialog {
        id: fileDialog
    }

    MenuBar {
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("Open")
                shortcut: StandardKey.Open
                onTriggered: fileDialog.open()
            }
        }
        Menu {
            title: qsTr("Control")
            MenuItem {
                text: qsTr("Up")
                shortcut: "Up"
                onTriggered: console.log("up!")
            }
        }
    }
}

我在 macOS 10.14.4 上使用 Qt 5.12.3

【问题讨论】:

  • 在 Linux 中正常工作,因为 FileDialog 获得焦点,它可能只是 Mac OS 的一个错误,所以我建议你报告一个错误。

标签: macos qt qml


【解决方案1】:

我没有 Mac,所以这是在黑暗中拍摄的。您是否尝试过强制将注意力集中在 FileDialog 上?

FileDialog {
   id: fileDialog
   Item {
     id: focus
   }
   onVisibleChanged: if(visible) focus.forceActiveFocus()
}

这将强制关注 FileDialog 作为 focus 的父级。

【讨论】:

  • 如果上面的方法不行,试试shortcut: fileDialog.visible? "" : "Up"
  • 不幸的是,第一个解决方法不起作用......它会更简单,因为第二个迫使我在每个 MenuItem 快捷方式属性上使用它。
  • @MartinDelille 如果您创建自己的MenuItem 模块并将对话框的可见性绑定到一个属性,该属性在设置时会自动将您的shortcut 设置为空。这样一来,您就不必为每个人手动执行此操作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2013-09-12
  • 2011-05-02
  • 1970-01-01
相关资源
最近更新 更多