2012-03-13 5 views
11

Mam projekt QtQuick na pulpit. To jest bardzo proste:Klucz 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")) 
      } 
     } 
    } 
} 

Mój kod nie działa tak, jak chcę. Keys.onEnterPressed nigdy nie wydają się do niewoli, więc staram Keys.onPressed to działa, ale nie wiem, dlaczego po naciśnięciu Wprowadź, na even.key powraca 16777220.

któregokolwiek dostać ten problem? Jak mogę to rozwiązać?
Dzięki za odpowiedź!

+1

Czy masz na myśli to, że po naciśnięciu klawisza "Enter" na klawiaturze numerycznej (kod klucza 16777221), jest on rozpoznawany jako klawisz "Return" (16777220)? – alexisdm

+1

Tak, i myślę, że dlaczego mój kod nigdy nie wyzwala * Keys.onEnterPressed *! – nvcnvn

+1

możesz spróbować naRozrywkaRozpoznane obsługi? – Kunal

Odpowiedz

14

Ten sam problem dotyczy elementu TextInput. Próbowałem

  • onPressed
  • onEnterPressed
  • onReturnPressed

Tylko ten ostatni pracował (onReturnPressed). Przypuszczam, że podstawowa implementacja TextInput przechwytuje klawisz Enter, aby nie był przetwarzany przez sygnał onPressed w regularny sposób.

Przy okazji: kod klucza jest poprawny. To abstrakcja na temat kluczowych kluczy do platformy.

+1

> Sądzę, że podstawowa implementacja TextInput przechwytuje klawisz "Enter", aby nie był przetwarzany przez sygnał onPressed w regularny sposób. Twój kod powinien być domyślnie przetwarzany jako pierwszy. Zobacz [Keys.priority] (http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#priority-prop) – drzymala

0

Powiedziałbym również, że użył on onReturnPressed. W przeciwnym razie możesz również sprawdzić wartość klucza w onPressed() i tam zareagować. onReturn/EnterPressed to tylko funkcje wygodne.

0

Potencjalnie istotne kontekst zaczerpnięte z docs:

[...] kolejność kluczowym wydarzeniem przetwarzania jest:

  1. przedmioty określone w forwardTo
  2. konkretne kluczowe koparki, np onReturnPressed
  3. onPressed, onReleased handlers
  4. Specyficzne zarządzanie kluczami, np. TextInput klucz obsługa
  5. pozycja dominująca
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

Lepszym sposobem obsługi użytkowników wprowadzając wartość tekstu jest użycie TextInput.onAccepted

Oto przykład:

TextInput { 
    onAccepted: processText() 
} 

Gdy użytkownik naciśnie klawisz Enter, zostanie wywołana metoda processText(). To podejście jest prostsze i powinno poprawić przenośność między platformami.