アプリケーションでフォーカスを適切に設定する方法を見つけようとしています。
コンポーネント 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"
}
//...
}