【发布时间】:2014-12-19 22:23:42
【问题描述】:
已经创建了一个 QML QtObject:
QtObject {
property int p: 42
property int q: 44
}
在将其存储在局部变量QObject *obj 中后,如何打印所有自定义属性名称和可能的值(即上面的示例中只有p 和q)?我希望它适用于任何类(不仅仅是QtObject),而不是打印已经用Q_PROPERTY 声明的属性。
澄清:我所说的“自定义”并不是指通过QObject::setProperty 添加的、未使用Q_PROPERTY 声明的属性。我的意思是通过property <type> <name>: <value> 表示法在QML 中声明的属性,这些属性未在该QML 对象的QObject 子类中使用Q_PROPERTY 声明。快速测试表明QObject::dynamicPropertyNames 中没有出现这些属性。
【问题讨论】:
-
QtObject 是 QML 中每个类的基类。那么,当您说“不仅仅是 QtObject”时,您的意思是什么?
-
我的意思是我想获得一个列表,其中不包括我已经包含在
QObject的子类的Q_PROPERTY声明中的所有属性。这是关于如何区分它们的。 -
在您的问题中,QML 动态属性实际上是 QML 自定义属性。例如,参见文档页面 [Inline Link](doc.qt.io/qt-5/qtqml-syntax-objectattributes.html) QML 自定义属性不同于 QObject 动态属性。所以 QML 自定义属性的名称不包含在
dynamicPropertyNames()的返回值中,当属性值发生变化时,对象无法接收到QDynamicPropertyChangeEvent。