Having created a QML QtObject:
QtObject {
property int p: 42
property int q: 44
}
After storing it in a local variable QObject *obj, how to print all custom property names and possibly values (i.e. only p and q for the example above)? I'd like this to work for any class (not just QtObject) and not print properties that were already declared with Q_PROPERTY.
Clarification: by "custom" I do not mean properties added through QObject::setProperty that were not declared using Q_PROPERTY. I mean properties declared in QML through property <type> <name>: <value> notation that were not declared using Q_PROPERTY in QObject subclass for that QML object. Quick test shows that those properties do not come up in QObject::dynamicPropertyNames.
All information about properties, invokable methods (slots too) and signals are stored by QMetaObject in every QObject. If you want to list all properties in an object:
QObject *obj = findObjectMethod();
QMetaObject *meta = obj->metaObject();
int n = meta->propertyCount();
for(int i = 0; i < n; ++i)
{
qDebug() << "Property: " << meta->property(i)->name();
}