QQuickAttachedPropertyPropagator 类

QQuickAttachedPropertyPropagator 类提供了一种传播附加属性的方法。有关更多信息,请点击更多...

头文件 #include <QQuickAttachedPropertyPropagator>
CMakefind_package(Qt6 REQUIRED COMPONENTS QuickControls2)
target_link_libraries(mytarget PRIVATE Qt6::QuickControls2)
qmakeQT += quickcontrols2
Qt 6.5
继承自 QObject

公共函数

QQuickAttachedPropertyPropagator(QObject *parent = nullptr)
virtual~QQuickAttachedPropertyPropagator()
QList<QQuickAttachedPropertyPropagator *>attachedChildren() const
QQuickAttachedPropertyPropagator *attachedParent() const

保护函数

virtual voidattachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
voidinitialize()

详细描述

在 QML 中,可以将属性和信号处理程序附加到对象。有关如何公开您自己的 C++ 附加类型的详细信息,请参阅附加属性和附加信号处理程序。以下是有关如何公开您自己的 C++ 附加类型的详细信息。提供附加属性

QQuickAttachedPropertyPropagator 提供了一个 API,可以将父对象中的附加属性传播到其子对象,类似于字体调色板的传播。它支持通过项目弹出窗口进行传播。

如果属性传播不重要,请考虑使用C++QML单例,因为它更适合该用途,并且在此用途中更高效,因为它只需要一个QObject

要使用 QQuickAttachedPropertyPropagator

关于这方面的深入示例,请参阅Qt Quick Controls - 附加样式属性示例

参见Qt Quick 控件样式

成员函数文档

[显式] QQuickAttachedPropertyPropagator::QQuickAttachedPropertyPropagator(QObject *parent = nullptr)

使用指定的 parent 构造一个 QQuickAttachedPropertyPropagator。

parent 会被用来找到此对象的 附加父对象

派生类应在它们的构造函数中调用 initialize()。

[虚拟 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);
}

[虚拟受保护] 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...
    }
}

[受保护] 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();
}

© 2024 Qt 公司有限公司。包含在本处的文档贡献的版权属于其各自的拥有者。本处提供的文档根据 GNU 自由文档许可证版本 1.3 的条款进行许可,由自由软件基金会发布。Qt 及其相应标志是芬兰和/或其他国家/地区的 The Qt Company Ltd. 的商标。所有其他商标均为其各自拥有者的财产。