2018年3月23日

FocusScope

モジュール

QtQuick 2.0

クラス継承

QQuickFocusScope → QQuickItem (FocusScope) → QObject

説明


主にコンポーネント化時に使われ、子オブジェクトのアクティブフォーカスを制御する。つまり、最後にアクティブフォーカスが与えられた子オブジェクトを覚え、フォーカスが与えられたときに最後にアクティブフォーカスが与えられた子オブジェクトにアクティブフォーカスを与える。

実際の動作は以降のようになる。FocusScope 内のオブジェクトで最後に focus が true になったものを覚える。FocusScope 外の他のオブジェクトの activeFocus が true になるとフォーカスが移動して FocusScope の focus と activeFocus はfalse になる。このとき FocusScope 内の最後に focus が true になったオブジェクトの focus は true のままを維持する。そして FocusScope の focusを true に設定するか forceActiveFocus() を呼び出すと、FocusScope 内で最後に focus が true になったオブジェクトの activeFocus を true にする。

FocusScope は Item を継承し Flag::ItemIsFocusScope フラグを立てただけである。このフラグは QML 側から操作できない。以下のタイプもこのフラグが設定されていて FocusScope と同じ動作をする。
Frame
GridView
GroupBox
ListView
Loader
Page
Pane
PathView
RangeSlider
ScrollView
SpinBox
StackView
SwipeView
TabBar
ToolBar

問題


リファレンス Keyboard Focus in Qt Quick の説明は間違いが多く、FocusScope の動作を適確に説明していないので、そのまま信用してはならない。

参考情報

Binding

モジュール

QtQml 2.8

クラス継承

QQmlBind → QObject

プロパティー

delayed: bool = false
property: string = ""
target: QtObject = null
value: var = undefined
when: bool = false

説明


QML にエクスポートされた C++ オブジェクトのプロパティーや Loader でインスタンス化されたオブジェクトのプロパティーにバインディングをする場合に用いる。

when に条件を指定すると true のときにのみバインディングを適用できる。

プロパティーの説明

delayed: bool

true に設定するとイベントループが空になったときにバインディングが実行される。

property: string

バインディング対象のプロパティーの名前を指定する。グループプロパティーの指定も可能。

target: QtObject

バインディング対象のプロパティーを持つオブジェクトを指定する。

value: var

バインディングする式を JavaScript で記述する。

when: bool

true の場合に value に記述したバインディングが設定され、false の場合にバインディングを取り除いて元のバインディングに戻す。

参考情報