デスクトップ用の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("t\na\ns")
}
}
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
シグナルによって処理されません。
ちなみに、キーコードは正しいです。これは、プラットフォーム固有のキーコードを抽象化したものです。
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) }
}
テキスト値を入力するユーザーを処理するためのより良い方法は、TextInput.onAcceptedを使用することです。
次に例を示します。
TextInput {
onAccepted: processText()
}
ユーザーがEnterキーを押すと、processText()メソッドが呼び出されます。このアプローチはより単純であり、クロスプラットフォームの移植性を向上させるはずです。
docs から取得した潜在的に関連するコンテキスト:
[...]キーイベント処理の順序は次のとおりです。
- ForwardToで指定されたアイテム
- 特定のキーハンドラー、例: onReturnPressed
- onPressed、onReleasedハンドラー
- アイテム固有のキー処理(例: TextInputキーの処理
- 親アイテム
OnReturnPressedも使用すると思います。それ以外の場合は、onPressed()でキー値を確認し、そこで反応することもできます。 onReturn/EnterPressedは、単なる便利な関数です。