summaryrefslogtreecommitdiff
path: root/examples/qtobject/qtmetaobjectpublisher.cpp
blob: db86145be1803ba3f9adf2c6aeccca9f0846f04e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "qtmetaobjectpublisher.h"
#include <QVariantMap>
#include <QStringList>
#include <QMetaObject>
#include <QMetaProperty>

QtMetaObjectPublisher::QtMetaObjectPublisher(QObject *parent) :
    QObject(parent)
{
}

QVariantMap QtMetaObjectPublisher::classInfoForObject(QObject *object)
{
    QVariantMap data;
    QStringList qtSignals, qtMethods, qtProperties;
    const QMetaObject* metaObject = object->metaObject();
    for (int i = 0; i < metaObject->propertyCount(); ++i)
        qtProperties.append(metaObject->property(i).name());
    for (int i = 0; i < metaObject->methodCount(); ++i) {
        QMetaMethod method = metaObject->method(i);
        QString signature = method.methodSignature();
        QString name = signature.left(signature.indexOf("("));
        if (method.access() == QMetaMethod::Public)
            qtMethods << signature << name;
        if (method.methodType() == QMetaMethod::Signal)
            qtSignals << signature << name;
    }
    data["signals"] = qtSignals;
    data["methods"] = qtMethods;
    data["properties"] = qtProperties;
    return data;
}