web-dev-qa-db-ja.com

QMLKeys.onEnterPressedの問題

デスクトップ用の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を試してみましたが、押したときに理由がわかりません Entereven.keyは16777220を返します。

誰かがこの問題を抱えていますか?どうすれば解決できますか?
ご回答有難うございます!

20
nvcnvn

TextInputアイテムでも同じ問題が発生しました。私は試した

  • onPressed
  • onEnterPressed
  • onReturnPressed

後者のみが機能しました(onReturnPressed)。おそらく、TextInputの基礎となる実装は、「Enter」キーをキャプチャするため、通常の方法でonPressedシグナルによって処理されません。

ちなみに、キーコードは正しいです。これは、プラットフォーム固有のキーコードを抽象化したものです。

18
Scharenberg
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) }
}
1
nAkhmedov

テキスト値を入力するユーザーを処理するためのより良い方法は、TextInput.onAcceptedを使用することです。

次に例を示します。

TextInput {
    onAccepted: processText()
}

ユーザーがEnterキーを押すと、processText()メソッドが呼び出されます。このアプローチはより単純であり、クロスプラットフォームの移植性を向上させるはずです。

1
PaulrBear

docs から取得した潜在的に関連するコンテキスト:

[...]キーイベント処理の順序は次のとおりです。

  1. ForwardToで指定されたアイテム
  2. 特定のキーハンドラー、例: onReturnPressed
  3. onPressed、onReleasedハンドラー
  4. アイテム固有のキー処理(例: TextInputキーの処理
  5. 親アイテム
0
ManuelSchneid3r

OnReturnPressedも使用すると思います。それ以外の場合は、onPressed()でキー値を確認し、そこで反応することもできます。 onReturn/EnterPressedは、単なる便利な関数です。

0
mauricek