2012-03-13 8 views
11

Ho un progetto QtQuick per desktop. È molto semplice:QML Keys.onEnterSTipato problema

// 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")) 
      } 
     } 
    } 
} 

Il mio codice non funziona come voglio. Il Keys.onEnterPressed sembrano mai essere catturato, così cerco Keys.onPressed funzionare ma non so perché quando si preme Invio , i rendimenti even.key 16777220.

Qualsiasi uno ottenere questo problema? Come posso risolverlo?
Grazie per la risposta!

+1

Significa che quando si preme il tasto "Invio" sul tastierino numerico (codice chiave 16777221), viene riconosciuto come il tasto "Invio" (16777220)? – alexisdm

+1

Sì, e penso che il mio codice non attivi mai * Keys.onEnterPressed *! – nvcnvn

+1

puoi provare onReturnPressed handler? – Kunal

risposta

14

Ho avuto lo stesso problema con un articolo TextInput. Ho provato

  • onPressed
  • onEnterPressed
  • onReturnPressed

Solo quest'ultimo uno funzionasse (onReturnPressed). Immagino che l'implementazione sottostante di TextInput acquisisca il tasto "Invio" in modo che non venga elaborato dal segnale onPressed in modo regolare.

A proposito: il codice chiave è corretto. È un'astrazione sui codici chiave specifici della piattaforma.

+1

> Suppongo che l'implementazione sottostante di TextInput acquisisca il tasto 'Invio' in modo che non venga elaborato dal segnale onPressed in modo regolare. Il tuo codice dovrebbe essere elaborato prima per impostazione predefinita. Vedi [Keys.priority] (http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#priority-prop) – drzymala

0

Direi uso anche su Ritorno ripristinato. Altrimenti puoi anche controllare il valore della chiave in onPressed() e reagire lì. onReturn/EnterPressed sono solo funzioni di convenienza.

0

contesto potenzialmente rilevanti tratto dal docs:

[...] l'ordine di chiave dell'evento trattamento è:

  1. prodotti specificati in ForwardTo
  2. gestori chiave specifiche, per esempio onReturnPressed
  3. onPressed, onRelease handler
  4. Gestione chiavi specifiche dell'articolo, ad es. TextInput la consegna delle chiavi
  5. elemento padre
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

Un modo migliore per gestire gli utenti inserendo un valore di testo è quello di utilizzare TextInput.onAccepted

Ecco un esempio:

TextInput { 
    onAccepted: processText() 
} 

Quando l'utente preme Invio, verrà chiamato il metodo processText(). Questo approccio è più semplice e dovrebbe migliorare la portabilità multipiattaforma.