2018年3月25日

コンポーネントスコープ

説明


サブコンポーネントを除くコンポーネントのすべてのオブジェクトの id とそのルートオブジェクトのプロパティーとメソッド (シグナル、JavaScript 関数) をコンポーネントスコープと定義する。このとき参照関係は以下のようになる。
  • コンポーネントスコープ内のものはファイル内で参照可能
  • 親系列コンポーネントのコンポーネントスコープ内のものは参照可能
  • 上記のいずれでもないものは参照不可
サブコンポーネントとは以下のものを指す。
  • Repeater や Instantiator、ListView のデリゲートやヘッダー、フッターなどに設定されたコンポーネント
  • Component で定義されるインラインコンポーネント
また、以下の制約と可視性がある。
  • コンポーネントスコープ内の id は重複不可。
  • コンポーネントスコープ内の id がコンポーネントスコープ内のプロパティーまたはメソッドと重複した場合は id 優先
  • コンポーネントスコープは、サブコンポーネントからは親系列コンポーネントのコンポーネントスコープになる
親系列コンポーネント内のものを参照するのは、全般的な情報への参照か依存関係が単純かつ密結合な場合に限るようにする。汎用コンポーネントを作成するには親への依存性は持たせないようにし、プロパティーを用意して振舞いを指定する。

Connections

モジュール

QtQml 2.3

クラス継承

QQuickLoader → QObject

プロパティー

target: QtObject = parent
enabled: bool = true
ignoreUnknownSignals: bool = false

シグナル

enabledChanged()
targetChanged()

説明


プロパティーの説明

target: QtObject

enabled: bool

ignoreUnknownSignals: bool

参考情報

Connections QML Type

Loader

モジュール

QtQuick 2.0

クラス継承

QQuickLoader → QQuickImplicitSizeItem (internal) → QQuickItem (FocusScope) → QObject

プロパティー

active: bool = true
asynchronous: bool = false
item: QtObject = null readonly
progress: real = 0 readonly
source: url = ""
sourceComponent: Component = null
status: Status = Loader.Null readonly

implicitWidth: real = 0 readonly override
implicitHeight: real = 0 readonly override

シグナル

loaded()

activeChanged()
asynchronousChanged()
itemChanged()
progressChanged()
sourceChanged()
sourceComponentChanged()
statusChanged()

void implicitWidthChanged()
void implicitHeightChanged()

メソッド

void setSource(QQmlV4Function*)

列挙

Status
        Null
        Ready
        Loading
        Error

説明


プロパティーの説明

active: bool

asynchronous: bool

item: QtObject

progress: real

source: QUrl

sourceComponent: Component

status: Status


implicitWidth: real

implicitHeight: real


シグナルの説明

loaded()

このシグナルが送信された時点では、まだレイアウトができる状態にはなっていない。

implicitWidthChanged()

implicitHeightChanged()


メソッドの説明

void setSource(QQmlV4Function*)


問題


Loader のリファレンスに sourceComponent を undefined を設定してアンロードすると書かれているが、undefined を設定すると null になる。また、sourceComponent のデフォルト値は null になっている。

レイアウト内で用いたときに Layout.fillWidth と Layout.fillHeight の片方だけを指定すると指定しない方の幅または高さが 0 になってしまう。

参考情報