Самоанализ с QMetaProperty

У меня есть класс 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.

2

Решение

metaPropertyA.notifySignal().signature() не возвращает указатель на метод, но его подпись (текстовое представление) — в вашем случае «aChanged (int)», и это то, что вам нужно для connect ().

Если вы хотите позвонить напрямую, вы можете использовать metaPropertyA.notifySignal().invoke(...),

РЕДАКТИРОВАТЬ:
вам нужно соединить некоторое число и имя метода, как это делают макросы SIGNAL и SLOT

так что вам нужно programaticcaly создать

QObject::connect(&objA, "2aChanged(int)", &objB, "1setB(int)");

но как получить «1setB (int)» это другая задача

EDIT2:
Я не знаю, что означает число, потому что это не индекс

1

Другие решения


По вопросам рекламы [email protected]