Самый простой способ использования существующего кода - принудительно активировать фокус * на другой элемент при нажатии кнопки:
Button {
anchors.right: parent.right
text: "lose Focus"
onClicked: forceActiveFocus()
}
Чтобы TextField
потерял фокус при щелчке на области за его пределами, вы можете сделать что-то похожее с MouseArea
:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
MouseArea {
anchors.fill: parent
onClicked: forceActiveFocus()
}
TextField {
id: textField
width: 130
height: 50
}
}
Этот элемент должен быть ниже (т. Е. Имеет более низкое значение Z, чем) других элементов в сцене. Вы также можете сделать его родителем других предметов для достижения этой цели:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
MouseArea {
anchors.fill: parent
onClicked: forceActiveFocus()
TextField {
id: textField
width: 130
height: 50
}
}
}
Если вы используете Qt Quick Controls 2, вы можете использовать свойство focusPolicy
, например, Pane
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Pane {
anchors.fill: parent
focusPolicy: Qt.ClickFocus
}
TextField {
id: textField
width: 130
height: 50
}
}