2012-03-13 23 views
11

デスクトップ用のQtQuickプロジェクトがあります。それは非常に簡単です:QML Keys.onEnterPressed issue

// 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は、even.key戻り16777220.

この問題を取得する任意のものを撮影していないので、私は私が押したときに、なぜを入力し、それが動作しKeys.onPressedではなく、確かに試すことがないように見えますか?どうすれば解決できますか?
あなたの答えをありがとう!

+1

数字パッド(キーコード16777221)の「Enter」キーを押すと、「Return」キー(16777220)として認識されますか? – alexisdm

+1

はい、私のコードが* Keys.onEnterPressed *をトリガーすることはないと思います! – nvcnvn

+1

あなたはonReturnPressedハンドラを試すことができますか? – Kunal

答えて

14

TextInputアイテムで同じ問題が発生しました。私は後者が(onReturnPressed)働い

  • onPressed
  • onEnterPressed
  • onReturnPressed

を試みました。私は、TextInputの基本的な実装は 'Enter'キーをキャプチャするので、通常の方法でonPressed信号で処理されません。

ところで:キーコードは正しいです。これは、プラットフォーム固有のキーコードに関する抽象です。 docsから採取

+1

> TextInputの基礎となる実装は 'Enter'キーをキャプチャするので、通常の方法でonPressed信号で処理されることはありません。 最初にコードをデフォルトで処理する必要があります。 [Keys.priority](http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#priority-prop)を参照してください。 – drzymala

0

私はonReturnPressedも使用するといいでしょう。それ以外の場合は、onPressed()のキー値をチェックしてそこで反応することもできます。 onReturn/EnterPressedは便利な関数です。

0

潜在的に関連するコンテキスト:

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

  1. アイテム
  2. 特定キーハンドラ、例えばonReturnPressed
  3. onPressed onRelease Handlers
  4. アイテム固有のキー操作。 TextInputのキー処理
  5. 親項目
1
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) } 
} 
0

テキスト値を入力するユーザを処理するためのより良い方法がTextInput.onAccepted

を使用することですここでは例です:

TextInput { 
    onAccepted: processText() 
} 

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