QQuickAttachedPropertyPropagator Class
Die Klasse QQuickAttachedPropertyPropagator bietet eine Möglichkeit, angehängte Eigenschaften zu propagieren. Mehr...
Kopfzeile: | #include <QQuickAttachedPropertyPropagator> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS QuickControls2) target_link_libraries(mytarget PRIVATE Qt6::QuickControls2) |
qmake: | QT += quickcontrols2 |
Seit: | Qt 6.5 |
Vererbt: | QObject |
Öffentliche Funktionen
QQuickAttachedPropertyPropagator(QObject *parent = nullptr) | |
virtual | ~QQuickAttachedPropertyPropagator() |
QList<QQuickAttachedPropertyPropagator *> | attachedChildren() const |
QQuickAttachedPropertyPropagator * | attachedParent() const |
Geschützte Funktionen
virtual void | attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) |
void | initialize() |
Detaillierte Beschreibung
In QML ist es möglich, Eigenschaften und Signalhandler an Objekte anzuhängen. Providing Attached Properties geht näher darauf ein, wie Sie Ihre eigenen angehängten C++-Typen bereitstellen können.
QQuickAttachedPropertyPropagator bietet eine API zur Weitergabe von angehängten Eigenschaften von einem übergeordneten Objekt an seine Kinder, ähnlich wie font und palette. Es unterstützt die Weitergabe durch items, popups und windows.
Wenn die Weitergabe von Eigenschaften nicht wichtig ist, sollten Sie stattdessen ein C++ oder ein QML-Singleton verwenden, da es für diesen Anwendungsfall besser geeignet ist und effizienter ist, da es nur ein QObject benötigt.
So implementieren Sie eine benutzerdefinierte angehängte Eigenschaft:
- Leiten Sie eine Klasse ab, die die angehängte Eigenschaft von QQuickAttachedPropertyPropagator bereitstellt.
Um zum Beispiel eine angehängte Eigenschaft
MyStyle.theme
zu implementieren, deklarieren Sie die KlasseMyStyle
:class MYSTYLE_EXPORT MyStyle : public QQuickAttachedPropertyPropagator
- Rufen Sie initialize() im Konstruktor Ihrer Klasse auf:
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(); }
- Definieren Sie je nach Bedarf Set/Inherit/Propagate/Reset-Funktionen für die angehängte Eigenschaft. Zum Beispiel, um eine
theme
angehängte Eigenschaft zu definieren:MyStyle::Theme MyStyle::theme() const { return m_theme; } void MyStyle::setTheme(Theme theme) { // When this function is called, we know that the user has explicitly // set a theme on this attached object. We set this to true even if // the effective theme didn't change, because it's important that // the user's specified value is respected (and not inherited from // from the parent). m_explicitTheme = true; if (m_theme == theme) return; m_theme = theme; propagateTheme(); themeChange(); } void MyStyle::inheritTheme(Theme theme) { if (m_explicitTheme || m_theme == theme) return; m_theme = theme; propagateTheme(); themeChange(); } void MyStyle::propagateTheme() { const auto styles = attachedChildren(); for (QQuickAttachedPropertyPropagator *child : styles) { MyStyle *myStyle = qobject_cast<MyStyle *>(child); if (myStyle) myStyle->inheritTheme(m_theme); } } void MyStyle::resetTheme() { if (!m_explicitTheme) return; m_explicitTheme = false; MyStyle *myStyle = qobject_cast<MyStyle *>(attachedParent()); inheritTheme(myStyle ? myStyle->theme() : globalTheme); }
- Reimplementieren Sie attachedParentChange(), um die Eigenschaftsvererbung zu behandeln:
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... } }
- Implementieren Sie eine statische Funktion
qmlAttachedProperties
und deklarieren Sie den Typ als angehängten QML-Typ mit QML_ELEMENT und QML_ATTACHED, wie in Bereitstellen von angehängten Eigenschaften beschrieben:MyStyle *MyStyle::qmlAttachedProperties(QObject *object) { return new MyStyle(object); }
Die vollständige Implementierung ist in Qt Quick Controls - Attached Style Properties Example verfügbar.
Siehe auch Styling Qt Quick Controls.
Dokumentation der Mitgliedsfunktionen
[explicit]
QQuickAttachedPropertyPropagator::QQuickAttachedPropertyPropagator(QObject *parent = nullptr)
Konstruiert einen QQuickAttachedPropertyPropagator mit dem angegebenen parent.
Die parent
wird verwendet, um die attached parent dieses Objekts zu finden.
Abgeleitete Klassen sollten initialize() in ihrem Konstruktor aufrufen.
[virtual noexcept]
QQuickAttachedPropertyPropagator::~QQuickAttachedPropertyPropagator()
Zerstört die QQuickAttachedPropertyPropagator.
QList<QQuickAttachedPropertyPropagator *> QQuickAttachedPropertyPropagator::attachedChildren() const
Diese Funktion gibt die angehängten Kinder dieses angehängten Objekts zurück.
Die angehängten Kinder werden bei der Weitergabe von Eigenschaftswerten verwendet:
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
Diese Funktion gibt das angehängte Elternteil dieses angehängten Objekts zurück.
Das angehängte übergeordnete Objekt wird bei der Vererbung von Eigenschaftswerten verwendet:
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)
Diese Funktion wird immer dann aufgerufen, wenn das angehängte Elternteil dieser QQuickAttachedPropertyPropagator von oldParent zu newParent wechselt.
Unterklassen sollten diese Funktion reimplementieren, um angehängte Eigenschaften von newParent
zu erben.
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()
Findet und setzt das angehängte übergeordnete Objekt für dieses angehängte Objekt und tut dann dasselbe für seine Kinder. Diese Funktion muss bei der Erstellung des angehängten Objekts aufgerufen werden, damit die Weitergabe funktioniert.
Es kann sinnvoll sein, vor dem Aufruf dieser Funktion die globalen Werte/Standardwerte zu lesen. Beispielsweise prüft der Imagine-Stil vor dem Aufruf von initialize()
ein statisches "globalsInitialized"-Flag, um festzustellen, ob er Standardwerte aus QSettings lesen soll. Die Werte aus dieser Datei bilden die Grundlage für alle angehängten Eigenschaftswerte, die nicht explizit festgelegt wurden.
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(); }
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.