我想做一个类似于Material.accent的东西,在那里我可以改变父属性和子属性,得到父属性的定义。
这是我当时做的方法,但是我在文档中找不到任何关于它的信息。我知道这是可能的,材质样式也使用这个方法和其他东西,比如字体属性。
class MyThemeAttached : public QObject {
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
QML_ANONYMOUS
public:
explicit MyThemeAttached(QObject* parent = nullptr)
: QObject(parent)
, m_color("#FF0000"){}
QColor color() const;
void setColor(const QColor color);
signals:
void backgroundChanged(QColor background);
private:
QColor m_color;
};
class MyTheme : public QObject
{
Q_OBJECT
QML_ATTACHED(MyThemeAttached)
QML_ELEMENT
public:
explicit MyTheme(QObject *parent = nullptr);
static MyThemeAttached *qmlAttachedProperties(QObject *object) {
return new MyThemeAttached(object);
}
};
ApplicationWindow {
id: root
visible: true
width: 800
height: 600
title: qsTr("Window")
MyCustomProperty.color: "orange"
Rectangle {
color: MyCustomProperty.color
}
}
2条答案
按热度按时间vptzau2j1#
为什么不看看Material的代码呢?我会向你介绍Woboq.org。
Here您可以看到,Material主题实际上是主动地将主题推向儿童:
pqwbnv8z2#
在Qt 6.5中,您可以使用QQuickAttachedPropertyPropagator来实现这一点。
要使用快速附加属性传播器:
下面是示例中的相关文件,以供参考。
mystyle.h:
mystyle.cpp: