qt - 如何打印 QML 对象的自定义属性列表?

标签 qt qml qt5

创建了一个 QML QtObject:

QtObject {
    property int p: 42
    property int q: 44
}

将其存储在局部变量 QObject *obj 后,如何打印所有自定义属性名称和可能的值(即上面示例中只有 pq)?我希望这适用于任何类(不仅仅是 QtObject ),而不是打印已经用 Q_PROPERTY 声明的属性。

澄清:“自定义”不是指通过 QObject::setProperty 添加的未使用 Q_PROPERTY 声明的属性。我的意思是通过 property <type> <name>: <value> 符号在 QML 中声明的属性,这些属性不是在该 QML 对象的 Q_PROPERTY 子类中使用 QObject 声明的。快速测试表明这些属性不会出现在 QObject::dynamicPropertyNames 中。

最佳答案

所有关于属性、可调用方法(槽)和信号的信息都由 QMetaObject 存储在每个 QObject 中。如果要列出对象中的所有属性:

QObject *obj = findObjectMethod();
QMetaObject *meta = obj->metaObject();
int n = meta->propertyCount();
for(int i = 0; i < n; ++i)
{
  qDebug() << "Property: " << meta->property(i)->name();
}

关于qt - 如何打印 QML 对象的自定义属性列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541846/

相关文章:

c++ - 大理石 window 汇编

c++ - 使用 Qt 获取页面内容

c++ - 为什么 QMediaGaplessPlaybackControl 不存在?

C++ 静态成员,多个对象

Qt5 转发信号

c++ - QSplitter 中的固定宽度小部件

c++ - QCoreApplication 事件循环和 Windows 服务控制处理函数

c++ - 奇怪的图像行为(Qt Quick 2)

qt - QML ToolButton 不调整大小

c++ - QQuickView 上未触发触摸事件