QML Keys.onEnterPressed проблема - PullRequest
       31

QML Keys.onEnterPressed проблема

16 голосов
/ 13 марта 2012

У меня есть проект 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.

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

Ответы [ 5 ]

18 голосов
/ 13 сентября 2012

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

  • onPressed
  • onEnterPressed
  • onReturnPressed

Работал только последний (onReturnPressed).Я предполагаю, что базовая реализация TextInput фиксирует клавишу «Ввод», поэтому она не обрабатывается сигналом onPressed обычным способом.

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

1 голос
/ 04 января 2018

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

. Вот пример:

TextInput {
    onAccepted: processText()
}

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

1 голос
/ 21 июля 2017
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 голосов
/ 09 февраля 2016

Потенциально релевантный контекст, взятый из документов :

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

  1. Заданные элементыв специальных обработчиках ключей forwardTo
  2. , например, обработчики onReturnPressed
  3. onPressed, onReleased
  4. обработка специфичных для элемента ключей, например обработка ключа TextInput
  5. родительский элемент
0 голосов
/ 02 апреля 2012

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

...