2012-03-13 65 views
11

我有一個桌面QtQuick項目。這是非常簡單的:QML Keys.onEnterPressed問題

// 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它的工作,但不知道爲什麼,當我按下回車,該even.key回報16777220.

任何一個得到這個問題?我該如何解決它?
感謝您的回答!

+1

您的意思是,當您按下數字鍵盤上的「Enter」鍵(鍵碼16777221)時,它會被識別爲「返回」鍵(16777220)? – alexisdm 2012-03-13 03:18:38

+1

是的,我認爲爲什麼我的代碼永遠不會觸發* Keys.onEnterPressed *! – nvcnvn 2012-03-13 03:44:49

+1

你可以試試ReturnPressed處理程序嗎? – Kunal 2012-03-13 06:36:46

回答

14

我得到了與TextInput項目相同的問題。我試圖

  • onPressed
  • onEnterPressed
  • onReturnPressed

只有後者的工作(onReturnPressed)。我猜想,TextInput的底層實現會捕獲「Enter」鍵,因此它不會以常規方式被onPressed信號處理。

順便說一句:關鍵代碼是正確的。它是平臺特定密鑰代碼的抽象。

+1

>我想,TextInput的底層實現會捕獲'Enter'鍵,因此它不會以常規方式被onPressed信號處理。 您的代碼應該默認處理。請參閱[Keys.priority](http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#priority-prop) – drzymala 2014-01-22 09:41:27

0

我會說使用onReturnPressed。否則,您也可以檢查onPressed()中的鍵值並在那裏做出反應。 onReturn/EnterPressed只是便利功能。

0

docs採取潛在相關上下文:

[...]鍵事件 處理的順序是:在指定的forwardTo

  1. 物品
  2. 特定鍵處理程序,例如onReturnPressed
  3. onPressed,onReleased處理程序
  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()方法將被調用。 這種方法更簡單,應該提高跨平臺的可移植性。