5

アプリケーションでフォーカスを適切に設定する方法を見つけようとしています。

コンポーネント MyItem.qml があり、その子のいずれかがフォーカスされたときに背景を変更したいと考えています。また、MyItem.qml から派生した MyDerivedItem.qml もあります。これは、その子のいずれかがフォーカスを取得した場合に基本クラスの背景を変更する必要があります。

ドキュメントを正しく理解していれば、コンポーネントがフォーカスを取得すると、階層内のすべての親の focus プロパティが true に設定されます (または、FocusScope コンポーネントに到達するまで)。

これが true の場合、MyItem.qml または MyDerivedItem.qml の TextField のいずれかを押すと、myItem.focus プロパティが true に変わり、背景の色が変わります。

やりたいことの小さな例を作ろうとしましたが、期待どおりに動作しません。

//main.qml
import QtQuick.Controls 2.0

ApplicationWindow {
    height: 768
    width: 1024
    visible: true

    MyDerivedItem {
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.bottom: parent.bottom
        width: parent.width / 2
    }
    MyDerivedItem {
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        width: parent.width / 2
    }
}

//MyItem.qml
import QtQuick 2.7
import QtQuick.Controls 2.0

Rectangle {
    id: myItem

    default property alias data: column.data

    color: focus ? "red" : "green"

    Column {
        id: column

        TextField {
            placeholderText: "Input Text Here"
        }
    }
}

//MyDerivedItem.qml
import QtQuick 2.7
import QtQuick.Controls 2.0

MyItem {
    id: myDerivedItem

    TextField {
        placeholderText: "Derived Input Text Here"
    }

    TextField {
        placeholderText: "Derived Input Text Here"
    }

    TextField {
        placeholderText: "Derived Input Text Here"
    }

    TextField {
        placeholderText: "Derived Input Text Here"
    }

    //...
}
4

2 に答える 2