QML按键.已按下问题



我有一个桌面版的QtQuick项目。很简单:

// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
Rectangle {
    width: 360
    height: 360
    Grid
    {
        id: xGrid
        width: parent.width
        height: parent.height
        columns: 2
        spacing: 1
        Rectangle
        {
            height: parent.height
            width: 10
            color: "#ff0000"
            Text {
                id: xText
                text: qsTr("tnans")
            }
        }
        TextEdit
        {
            id: xTextEdit
            height: parent.height
            width: 350
            Keys.onEnterPressed: {
                console.log(event.key)
                xText.text = (qsTr("A"))
            }
        }
    }
}

我的代码运行不符合我的要求。Keys.onEnterPressed似乎永远不会被捕获,所以我尝试Keys.onPressed它工作,但不确定为什么当我按下Enter时,even.key返回16777220。

有人知道这个问题吗?我该如何解决
谢谢你的回答!

我在TextInput项目中遇到了同样的问题。我试过

  • onPressed
  • onEnterPressed
  • onReturnPressed

只有后者起作用(onReturnPressed)。我想,TextInput的底层实现捕获了"Enter"键,所以它不会被onPressed信号以常规方式处理。

顺便说一下:钥匙代码是正确的。它是对特定于平台的关键代码的抽象。

处理用户输入文本值的更好方法是使用TextInput.onAccepted

这里有一个例子:

TextInput {
    onAccepted: processText()
}

当用户按下Enter键时,将调用processText()方法。这种方法更简单,应该可以提高跨平台的可移植性。

TextArea {
id: messageField
Layout.fillWidth: true
placeholderText: qsTr("Message")
wrapMode: TextArea.Wrap
inputMethodHints: Qt.ImhNoPredictiveText
function _onEnterPressed(event)
{
    if ((event.modifiers & Qt.ControlModifier))
    {
        sendMessage()
    }
    else
    {
        event.accepted = false;
    }
}
Keys.onReturnPressed: { _onEnterPressed(event) }
Keys.onEnterPressed: { _onEnterPressed(event) }
}

我认为也可以使用onReturnPressed。否则,您也可以在onPressed()中检查键值并在那里做出反应。onReturn/EnterPressed只是一些方便功能。

从文档中获取的潜在相关上下文:

[…]关键事件的顺序处理是:

  1. forwardTo中指定的项目
  2. 特定的密钥处理程序,例如onReturnPressed
  3. onPressed,onReleased处理程序
  4. 项目特定键处理,例如TextInput键处理
  5. 父项

相关内容

  • 没有找到相关文章