何时分配给属性的qml谓词得到评估?

问题描述 投票:0回答:2

编写类似代码时:

Item{
    id: item
    enabled:  backend.property == "X"
}

何时对谓词进行评估。一旦?还是每次属性更改?

此外,当在状态更改中分配属性时,它如何应用:在状态更改时或在每次发出属性更改信号时对它进行一次评估?

    State {
        name: "One"
        when: step == 2

        PropertyChanges {
            target: item
            enabled:  backend.property == "X"
        }
qt qml qt-quick
2个回答
0
投票

每当谓词中发生的任何属性发生更改(通过Q_PROPERTY(... NOTIFY signalX)进行评估时,都会对赋值进行评估。在您的示例中,它可以是backendproperty

您的示例中的PropertyChanges将执行相同的操作,每当任何属性更改时,都会对其进行评估。如果将true分配给explicit属性,则状态更改时,它将是一次评估。


0
投票

您可以通过在属性设置器中放置break或print语句来看到自己。每次调用通知信号时都会评估QML变量,即在以下情况下发出propChanged()。调用emit propChanged()时,该谓词也将重新评估,这很合逻辑,否则状态会不一致。

Q_PROPERTY(QString prop READ getProp WRITE setProp NOTIFY propChanged);

private:
    QString m_prop;

public:
    void setProp(QString prop) {
        if (prop != m_prop) {
            m_prop = prop;
            // log or break here
            emit propChanged();
        }
    }
    QString getProp() const { return m_prop; }

signals:
    void propChanged();
© www.soinside.com 2019 - 2024. All rights reserved.