无法使用Qt.ClickFocus将焦点设置到ScrollView

问题描述 投票:0回答:1

我只是希望当我单击 ScrollView 时我的 TextField 失去焦点,但问题是 ScrollView 不接受使用 Qt.ClickFocus 的焦点。

import QtQuick
import QtQuick.Controls.Universal

ApplicationWindow {
    visible: true
    width: 600
    height: 400

    ScrollView {
        anchors.fill: parent
        focusPolicy: Qt.ClickFocus

        TextField {
            id: textField
            implicitWidth: 400
            implicitHeight: 50
        }
    }
}

我认为有一些东西干扰了点击事件,因为当我使用

focusPolicy: Qt.TabFocus
它工作得很好。

我使用的是Qt 6.5。这是一个可怕的错误吗?

我解决这个问题的唯一方法是使用窗格作为滚动视图的子项,并将焦点策略设置为 Qt.ClickFocus

import QtQuick
import QtQuick.Controls.Universal

ApplicationWindow {
    visible: true
    width: 600
    height: 400

    ScrollView {
        id: scrollView
        anchors.fill: parent
        focusPolicy: Qt.ClickFocus

        Pane {
            width: scrollView.width
            height: Math.max(scrollView.height, implicitHeight)
            focusPolicy: Qt.ClickFocus

            TextField {
                id: textField
                implicitWidth: 400
                implicitHeight: 50
            }
        }
    }
}
qt qml focus scrollview qt6
1个回答
0
投票

您还可以使用作为

Item
子级的隐藏
ScrollView
,并为
TapHandler
安装调用隐藏
ScrollView
forceActiveFocus()`的
Item' 

    ScrollView {
        anchors.fill: parent
        TextField {
            id: textField
            implicitWidth: 400
            implicitHeight: 50
        }
        Item {
            id: hiddenItem
            visible: false
        }
        TapHandler {
            onTapped: hiddenItem.forceActiveFocus()
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.