qt - 如何实现点击TextField外的区域使TextField失去焦点?

标签 qt qml

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失去焦点?

最佳答案

使用现有代码的最简单方法是 force active focus单击按钮时在另一个项目上:

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 属性(property),例如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
    }
}

关于qt - 如何实现点击TextField外的区域使TextField失去焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55101332/

相关文章:

c++ - qmltestcase找不到c++类方法

XPath - 根据以下同级选择节点

c++ - 使用 QQmlContext::setContextObject 使 C++ 对象对 QML 可见

c++ - QT5 C++ 信号到 QML 槽不工作

c++ - 线程中的 QTcpSocket 并不总是立即发送数据

qt - 从 mirth connect 读取数据 - tcp server qt creator

c++ - 使用 QtCreator 构建纯 C++

c++ - 将 QT 与 Boehm-Demers-Weiser-Gc 结合使用

c++ - Qt:为什么在 QWidget 上声明 event() protected

qt - 如何以编程方式关闭 QMenu