Проблема QML Key.onEnterPressed

У меня есть проект QtQuick для рабочего стола. Это очень просто:

// 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 работать, но не уверен, почему, когда я нажимаю Enter, even.key возвращает 16777220.

Кто-нибудь может получить эту проблему? Как я могу это решить?
Спасибо за ваш ответ!

Ответ 1

У меня такая же проблема с элементом TextInput. Я попробовал

  • onPressed
  • onEnterPressed
  • onReturnPressed

Только последний работал (onReturnPressed). Я предполагаю, что базовая реализация TextInput захватывает ключ 'Enter', поэтому он не обрабатывается сигналом onPressed обычным способом.

Кстати: key code правильный. Это абстракция определенных кодов клавиш платформы.

Ответ 2

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

Ответ 3

Я бы сказал, что также использую onReturnPressed. В противном случае вы также можете проверить значение ключа в onPressed() и отреагировать на него. onReturn/EnterPressed - это просто удобные функции.

Ответ 4

Потенциально соответствующий контекст, взятый из docs:

[...] порядок ключевого события обработка:

  • Элементы, указанные в forwardTo
  • конкретные обработчики ключей, например. onReturnPressed
  • onPressed, onReleased обработчики
  • Обработка специальных элементов, например. Обработка ключа TextInput
  • родительский элемент

Ответ 5

Лучшим способом обработки пользователей, вводящих текстовое значение, является использование TextInput.onAccepted

Вот пример:

TextInput {
    onAccepted: processText()
}

Когда пользователь нажимает Enter, вызывается метод processText(). Этот подход более прост и должен улучшить кросс-платформенную переносимость.