QMLTextArea繼承onEditingFinished自TextEdit它在失去焦點或輸入/回傳按下時觸發的地方。(假設沒有輸入驗證)
但是,不能從TextAreawithEnter不同 for觸發 onEditingFinished ,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")}
}
}
uj5u.com熱心網友回復:
您可以覆寫 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();
}
}
uj5u.com熱心網友回復:
您可以通過自己處理簡單的ReturnPressedandctrl 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")}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337944.html
上一篇:根據總大小批量移動檔案
