QQuickAttachedPropertyPropagator Class
QQuickAttachedPropertyPropagator クラスは、アタッチされたプロパティを伝播する方法を提供します。詳細...
Header: | #include <QQuickAttachedPropertyPropagator> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS QuickControls2) target_link_libraries(mytarget PRIVATE Qt6::QuickControls2) |
qmake: | QT += quickcontrols2 |
Since: | Qt 6.5 |
Inherits: | QObject |
パブリック関数
QQuickAttachedPropertyPropagator(QObject *parent = nullptr) | |
virtual | ~QQuickAttachedPropertyPropagator() |
QList<QQuickAttachedPropertyPropagator *> | attachedChildren() const |
QQuickAttachedPropertyPropagator * | attachedParent() const |
保護された関数
virtual void | attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) |
void | initialize() |
詳細説明
QMLでは、オブジェクトにプロパティやシグナルハンドラをアタッチすることができます。アタッチド・プロパティの提供では、独自のC++アタッチド型を公開する方法について詳しく説明しています。
font palette QQuickAttachedPropertyPropagator は、親オブジェクトから子オブジェクトにアタッチドプロパティを伝搬するAPIを提供します。これは、items 、popups 、windows を介したプロパゲーションをサポートしています。
QObjectプロパティの伝搬が重要でない場合は、C++ やQML のシングルトンを使うことを検討してください。
QQuickAttachedPropertyPropagator を使用するには、次のようにします:
- 派生
- コンストラクタでinitialize() を呼び出します。
- 必要に応じて、各プロパティの set/inherit/propagate/reset 関数を定義します。
- プロパティの継承を処理するためにattachedParentChange() を再実装する。
- 静的な
qmlAttachedProperties
関数を実装し、QML_ELEMENT とQML_ATTACHED を用いて、QML のアタッチド・プロパティとして宣言します。
Qt Quick Controls - Attached Style Properties Example を参照してください。
Qt Quick Controls のスタイリング」も参照して ください。
メンバ関数 ドキュメント
[explicit]
QQuickAttachedPropertyPropagator::QQuickAttachedPropertyPropagator(QObject *parent = nullptr)
与えられたparent で QQuickAttachedPropertyPropagator を構築します。
parent
は、このオブジェクトのattached parent を見つけるために使用されます。
派生クラスは、コンストラクタ内でinitialize() を呼び出す必要があります。
[virtual noexcept]
QQuickAttachedPropertyPropagator::~QQuickAttachedPropertyPropagator()
QQuickAttachedPropertyPropagator を破棄します。
QList<QQuickAttachedPropertyPropagator *> QQuickAttachedPropertyPropagator::attachedChildren() const
この関数は、このアタッチされたオブジェクトのアタッチされた子を返します。
アタッチされた子オブジェクトは、プロパティ値を伝搬する際に使用されます:
void MyStyle::propagateTheme() { const auto styles = attachedChildren(); for (QQuickAttachedPropertyPropagator *child : styles) { MyStyle *myStyle = qobject_cast<MyStyle *>(child); if (myStyle) myStyle->inheritTheme(m_theme); } }
QQuickAttachedPropertyPropagator *QQuickAttachedPropertyPropagator::attachedParent() const
この関数は、このアタッチされたオブジェクトのアタッチされた親を返します。
アタッチされた親は、プロパティ値を継承するときに使用されます:
void MyStyle::resetTheme() { if (!m_explicitTheme) return; m_explicitTheme = false; MyStyle *myStyle = qobject_cast<MyStyle *>(attachedParent()); inheritTheme(myStyle ? myStyle->theme() : globalTheme); }
[virtual protected]
void QQuickAttachedPropertyPropagator::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
この関数は、このQQuickAttachedPropertyPropagator のアタッチされた親がoldParent からnewParent に変わるたびに呼び出されます。
サブクラスは、newParent
からアタッチド・プロパティを継承するために、この関数を再実装する必要があります。
void MyStyle::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) { Q_UNUSED(oldParent); MyStyle *attachedParentStyle = qobject_cast<MyStyle *>(newParent); if (attachedParentStyle) { inheritTheme(attachedParentStyle->theme()); // Do any other inheriting here... } }
[protected]
void QQuickAttachedPropertyPropagator::initialize()
このアタッチドオブジェクトのアタッチドペアレントを検索して設定し、その子オブジェクトにも同じことを行います。伝播させるためには、アタッチドオブジェクトの構築時にこの関数を呼び出す必要があります。
この関数を呼び出す前に、グローバル値やデフォルト値を読み込んでおくと便利です。例えば、initialize()
を呼び出す前に、Imagineスタイルは静的な「globalsInitialized」フラグをチェックして、QSettings からデフォルト値を読み込む必要があるかどうかを確認します。このファイルの値は、明示的に設定されていないアタッチされたプロパティ値の基礎となります。
MyStyle::MyStyle(QObject *parent) : QQuickAttachedPropertyPropagator(parent) , m_theme(globalTheme) { // A static function could be called here that reads globalTheme from a // settings file once at startup. That value would override the global // value. This is similar to what the Imagine and Material styles do, for // example. initialize(); }
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。