Проблема 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().
Этот подход более прост и должен улучшить кросс-платформенную переносимость.