过期的属性读取
qmllint 将此警告类别拼写为[stale-property-read] 。
读取非常量且非可通知属性
发生了什么?
绑定中使用了一个既非常量又不可通知的属性。
这有什么问题?
常量属性的值永远不会改变。可通知属性在值发生变化时会通知依赖于它们的绑定,以便这些绑定能够重新评估。
由于该属性既非常量也非可通知属性,因此在程序执行过程中其值可能会发生变化,却不会通知依赖它的绑定。这将导致这些绑定处于可能已过时的状态,因为它们的值依赖于该属性。
示例
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...
}
}要解决此警告,如果该属性的值不会改变,请将其标记为常量;否则,请将其设为可通知属性。
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;
};© 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.