2

クラスがありますObjectA

class ObjectA : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int _a READ a WRITE setA NOTIFY aChanged)
public:
    ObjectA(int a) : _a(a) {}
    int a() const { return _a;}
public slots:
    void setA(int a) { _a = a; emit aChanged(_a);}
signals:
    void aChanged(int);
private:
    int _a;
};

そしてクラスObjectB

class ObjectB : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int _b READ b WRITE setB NOTIFY bChanged)
public:
    ObjectB(int b) : _b(b) {}
    int b() const { return _b;}
public slots:
    void setB(int b) { _b = b; emit bChanged(_b);}
signals:
    void bChanged(int);
private:
    int _b;
};

そして、私はこのようなシグナル/スロット接続をしたいと思います

QObject::connect(&objA, SIGNAL(aChanged(int)), &objB, SLOT(setB(int)));

名前のプロパティしか知りません。

ObjectA objA(10);
ObjectB objB(5);
QObject * objectA = &objA;
const QMetaObject* metaObjectA = objectA->metaObject();
QMetaProperty metaPropertyA = metaObjectA->property(metaObjectA->indexOfProperty("_a"));


QObject * object = &objB;
const QMetaObject* metaObjectB = object->metaObject();
QMetaProperty metaPropertyB = metaObjectB->property(metaObjectB->indexOfProperty("_b"));

QObject::connect(&objA, metaPropertyA.notifySignal().methodSignature(), &objB, ... );

objA.setA(2);
std::cout << "objA.a() = " << objA.a() << " objB.b() = " << objB.b() << std::endl;

しかし

metaPropertyA.notifySignal().methodSignature()

関数のポインターを返さず、set メソッドのポインターを取得する方法もわかりません。

4

1 に答える 1