Как добиться, чтобы щелкнуть область за пределами TextField, чтобы TextField потерял фокус? - PullRequest
0 голосов
/ 11 марта 2019
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")

    TextField {
        id:textField
        width: 130
        height: 50
    }

    Button {
        anchors.right: parent.right
        text: "lose Focus"
    }
}

почему textField не теряет фокус при нажатии кнопки? Как добиться, чтобы щелкнуть область за пределами TextField, чтобы TextField потерял фокус?

1 Ответ

1 голос
/ 11 марта 2019

Самый простой способ использования существующего кода - принудительно активировать фокус * на другой элемент при нажатии кнопки:

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...