[英]How to change textfield property from 'onEditingFinished' in Qt QML
[英]QML TextArea onEditingFinished On Enter
QML TextArea
继承了onEditingFinished
From TextEdit
,它在失去焦点或按下回车/返回时触发。 (假设没有输入验证)
但是,与TextEdit
不同的是,不能使用Enter
从TextArea
触发 onEditingFinished,因为它是为换行符捕获的。
此外,在具有单个字段的窗口中,从作为背景的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 的情况下使用 Return 键,那么您可以简单地执行以下操作:
TextArea {
implicitHeight: 200
placeholderText: qsTr("Enter description")
onEditingFinished: console.log("Editing complete")
Keys.onReturnPressed: {
editingFinished();
}
}
您可以通过自己处理简单的ReturnPressed
和ctrl+ReturnPressed
或Shift+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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.