【问题标题】:QML2 ApplicationWindow Keys handlingQML2 ApplicationWindow 键处理
【发布时间】:2015-01-08 02:37:09
【问题描述】:

有没有办法处理QtQuick.Controls组件的ApplicationWindow中的按键事件? Qt5.3 的文档没有提供任何方法来做到这一点。此外,它说 Keys 仅存在于 Item-objects 中。当我尝试处理按键事件时,它显示“无法将 Keys 属性附加到:ApplicationWindow_QMLTYPE_16(0x31ab890) 不是项目”:

import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.1
import QtQuick.Window 2.1


ApplicationWindow {
    id: mainWindow
    visible: true
    width: 720
    height: 405
    flags: Qt.FramelessWindowHint
    title: qsTr("test")

    x: (Screen.width - width) / 2
    y: (Screen.height - height) / 2

    TextField {
        id: textField
        x: 0
        y: 0
        width: 277
        height: 27
        placeholderText: qsTr("test...")
    }

    Keys.onEscapePressed: {
        mainWindow.close()

        event.accepted = true;
    }
}

【问题讨论】:

    标签: qt event-handling window key qml


    【解决方案1】:

    也许这会有所帮助。 使用Shortcut 不需要设置focus

    ApplicationWindow {
        id: mainWindow
    
        Shortcut {
            sequence: "Esc"
            onActivated: mainWindow.close()
            }
        }
    }
    

    【讨论】:

      【解决方案2】:
      ApplicationWindow {
      id: mainWindow
        Item {
          focus: true
          Keys.onEscapePressed: {
            mainWindow.close()
            event.accepted = true;
          }
        TextField {}
        }
      }
      

      【讨论】:

      • 我已经尝试过您的解决方案,但我也尝试过创建TextField。当焦点放在TextField 上时,您的解决方案不起作用,因为此时它有focus: false。您的解决方案仅在 ApplicationWindow 也没有任何内容的情况下才有效。我已编辑问题以包含此文本字段。
      • @Victor Polevoy 你所有的控件都应该是 Item 的子元素
      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多