Sur cette page

Propriété périmée lue

Cette catégorie d'avertissement a été orthographiée [stale-property-read] par qmllint.

Lecture d'une propriété non constante et non notifiable

Qu'est-ce qui s'est passé ?

Une propriété qui est à la fois non constante et non notifiable est utilisée dans un binding.

Pourquoi est-ce mauvais ?

Lespropriétés constantes ne changent jamais de valeur. Les propriétés notifiables informent les liaisons qui en dépendent lorsqu'elles changent de valeur afin que les liaisons puissent être réévaluées.

Cette propriété n'étant ni constante ni notifiable, elle pourrait changer au cours de l'exécution du programme sans que les liaisons qui en dépendent en soient informées. Cela laisserait les liaisons dans un état potentiellement obsolète, puisque leur valeur dépend de la propriété.

Exemple

class Circle : public QObject
{
    Q_OBJECT
    QML_ELEMENT
    Q_PROPERTY(double radius READ radius WRITE setRadius FINAL)
public:
    double radius() const { return m_radius; }
    void setRadius(double radius) { m_radius = radius; }
private:
    double m_radius = 1;
};
import QtQuick

Item {
    Circle {
        id: circle
        property double area: Math.PI * radius * radius
    }

    Component.onCompleted: {
        console.log(circle.area) // 3.14159...
        circle.radius = 2
        console.log(circle.area) // 3.14159...
    }
}

Pour corriger cet avertissement, il faut soit marquer la propriété comme constante si elle ne change pas de valeur, soit la rendre notifiable.

class Circle : public QObject
{
    Q_OBJECT
    QML_ELEMENT
    Q_PROPERTY(double radius READ radius WRITE setRadius NOTIFY radiusChanged FINAL)
public:
    double radius() const { return m_radius; }
    void setRadius(double radius) {
        if (radius != m_radius) {
            m_radius = radius;
            emit radiusChanged();
        }
    }
signals:
    void radiusChanged();
private:
    double m_radius = 1;
};
import QtQuick

Item {
    Circle {
        id: circle
        property double area: Math.PI * radius * radius
    }

    Component.onCompleted: {
        console.log(circle.area) // 3.14159...
        circle.radius = 2
        console.log(circle.area) // 12.5663...
    }
}

© 2026 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.