QQuickAttachedPropertyPropagator 类
QQuickAttachedPropertyPropagator 类提供了一种传播附加属性的方法。有关更多信息,请点击更多...
头文件 | #include <QQuickAttachedPropertyPropagator> |
CMake | find_package(Qt6 REQUIRED COMPONENTS QuickControls2) target_link_libraries(mytarget PRIVATE Qt6::QuickControls2) |
qmake | QT += quickcontrols2 |
自 | Qt 6.5 |
继承自 | 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++ 附加类型的详细信息,请参阅附加属性和附加信号处理程序。以下是有关如何公开您自己的 C++ 附加类型的详细信息。提供附加属性
QQuickAttachedPropertyPropagator 提供了一个 API,可以将父对象中的附加属性传播到其子对象,类似于字体和调色板的传播。它支持通过项目、弹出和窗口进行传播。
如果属性传播不重要,请考虑使用C++或QML单例,因为它更适合该用途,并且在此用途中更高效,因为它只需要一个QObject。
要使用 QQuickAttachedPropertyPropagator
- 从它派生
- 在构造函数中调用initialize()
- 根据需要为每个属性定义设置/继承/传播/重置函数
- 重新实现attachedParentChange()以处理属性继承
- 实现一个静态的
qmlAttachedProperties
函数,并使用QML_ELEMENT和QML_ATTACHED将类型声明为附加 QML 类型,详情请见提供附加属性
关于这方面的深入示例,请参阅Qt Quick Controls - 附加样式属性示例。
成员函数文档
[显式]
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. 的商标。所有其他商标均为其各自拥有者的财产。