2012-03-13 11 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

क्या आपका मतलब है कि जब आप न्यूमेरिक पैड (कुंजी कोड 16777221) पर "एंटर" कुंजी दबाते हैं, तो इसे "रिटर्न" कुंजी (16777220) के रूप में पहचाना जाता है? – alexisdm

+1

हां, और मुझे लगता है कि क्यों मेरा कोड * Keys.onEnterPressed * को ट्रिगर नहीं करता है! – nvcnvn

+1

क्या आप रीटेनप्रेस हैंडलर पर कोशिश कर सकते हैं? – Kunal

उत्तर

14

मुझे TextInput आइटम के साथ एक ही समस्या मिली। मैंने कोशिश की

  • onPressed
  • onEnterPressed
  • onReturnPressed

केवल उत्तरार्द्ध एक काम (onReturnPressed)। मुझे लगता है कि TextInput के अंतर्निहित कार्यान्वयन 'एंटर' कुंजी को कैप्चर करता है, इसलिए इसे नियमित रूप से onPressed सिग्नल द्वारा संसाधित नहीं किया जाता है।

वैसे: कुंजी कोड सही है। यह मंच विशिष्ट कुंजी कोड पर एक अमूर्त है।

+1

> मुझे लगता है कि टेक्स्ट इनपुट का अंतर्निहित कार्यान्वयन 'एंटर' कुंजी को कैप्चर करता है, इसलिए इसे नियमित रूप से ऑनप्रेस सिग्नल द्वारा संसाधित नहीं किया जाता है। आपका कोड डिफ़ॉल्ट रूप से पहले संसाधित किया जाना चाहिए। [Keys.priority] देखें (http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#priority-prop) – drzymala

0

मैं कहता हूं कि रीटर्न दबाए गए हैं। अन्यथा आप onPressed() में कुंजी मान भी देख सकते हैं और वहां प्रतिक्रिया दे सकते हैं। ऑनरनेट/एंटर दबाए गए बस सुविधा कार्य हैं।

0

संभावित प्रासंगिक संदर्भ docs से लिया:

[...] महत्वपूर्ण घटना प्रसंस्करण के आदेश है:

  1. आइटम forwardTo में निर्दिष्ट
  2. विशिष्ट कुंजी संचालकों, उदा onReturnPressed
  3. दबाए गए, ऑनलेड हैंडलर
  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() 
} 

जब उपयोगकर्ता एंटर दबाता है, तो processText() विधि को कॉल किया जाएगा। यह दृष्टिकोण सरल है और क्रॉस-प्लेटफ़ॉर्म पोर्टेबिलिटी में सुधार करना चाहिए।

संबंधित मुद्दे