QML TextArea onEditingFinished On Enter



QMLTextArea继承onEditingFinished来自TextEdit,它在失去焦点或回车键时触发。(假设没有输入验证)

然而,一个不能触发onEditingFinished从TextAreaEnter不像TextEdit,因为它被捕获为一个换行符。

此外,在一个单一字段的窗口中,从TextArea中删除焦点作为背景可能是不直观的,并且大多数其他控件不接受焦点,因此用户必须单击窗口或单击菜单栏。

我如何提高用户体验触发动作一旦他们编辑了多行字符串输入字段?是否使用Ctrl+Enter输入换行符,并在Enter上进行编辑完成,如果是这样,将如何实现?

下面是这个场景的示例QML:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
Window {
visible: true
width: 640; height: 480
title: qsTr("Hello World")
Column {
TextArea {
implicitHeight: 200
placeholderText: qsTr("Enter description")
onEditingFinished: console.log("Editing complete")
}
Label {text: qsTr("Label")}
}
}

您可以覆盖Return键按下事件并按照您的需要处理它。如果您想使用Ctrl+Return,请检查事件中的modifiers属性。

TextArea {
implicitHeight: 200
placeholderText: qsTr("Enter description")
onEditingFinished: console.log("Editing complete")

Keys.onReturnPressed: {
if (event.modifiers & Qt.ControlModifier) {
// Ctrl+Return
editingFinished();
}
else {
// Ignore other cases
event.accepted = false;
}
}
}

或者如果你想在不按Ctrl的情况下使用返回键,那么你可以简单地这样做:

TextArea {
implicitHeight: 200
placeholderText: qsTr("Enter description")
onEditingFinished: console.log("Editing complete")

Keys.onReturnPressed: {
editingFinished();
}
}

您可以通过自己处理简单的ReturnPressedctrl+ReturnPressedShift+ReturnPressed事件来实现。

在下面的代码中,我使用Shift+ReturnPressed作为新行:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
Window {
visible: true
width: 640; height: 480
title: qsTr("Hello World")
Column {
TextArea {
id: text_area
implicitHeight: 200
placeholderText: qsTr("Enter description")
Keys.onReturnPressed: {
if(Qt.ShiftModifier)
console.log("Editing complete")
else {
text += 'n'
text_area.cursorPosition = text_area.length
}
}
}
Label {text: qsTr("Label")}
}
}

根据Jarman (https://stackoverflow.com/a/69723941/1581658)和Farshid616 (https://stackoverflow.com/a/69724074/1581658)的答案,我想出了这个

TextArea {
implicitHeight: 200
placeholderText: qsTr("Enter description")
onEditingFinished: console.log("Editing complete")

Keys.onReturnPressed: {
if(event.modifiers & Qt.ControlModifier) {
insert(cursorPosition, "n")
}
else {
editingFinished()
}
}
}

这特别允许在按下Ctrl+Enter时在当前光标处插入换行符,并且在按下未修改的Enter时调用editingFinished

相关内容

  • 没有找到相关文章

最新更新