我有一个桌面版的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只是一些方便功能。
从文档中获取的潜在相关上下文:
[…]关键事件的顺序处理是:
- forwardTo中指定的项目
- 特定的密钥处理程序,例如onReturnPressed
- onPressed,onReleased处理程序
- 项目特定键处理,例如TextInput键处理
- 父项