Sur cette page

Lecture d'une propriété obsolète

Cette catégorie d'avertissement est orthographiée « [stale-property-read] » par qmllint.

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

Que s'est-il passé ?

Une propriété à la fois non constante et non notifiable est utilisée dans une liaison.

Pourquoi est-ce un problème ?

Les proprié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 celles-ci puissent être réévaluées.

Comme cette propriété n’est ni constante ni notifiable, elle pourrait changer au cours de l’exécution du programme sans notifier les liaisons qui en dépendent. Cela laisserait les liaisons dans un état potentiellement obsolète, car leur valeur dépend de cette 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, marquez la propriété comme constante si sa valeur ne change pas, ou rendez-la 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.