Я нашел интересную статью о том, как реализовать QObject с динамическими свойствами (см. Класс C ++ DynamicObject). Код из этой статьи работает нормально, свойства DynamicObject успешно устанавливаются и устанавливаются как в C ++, так и в QML, но единственное, что я не могу понять, - это как запускать динамические сигналы.
Я попытался запустить сигнал "nameChanged ()" со следующим кодом:
bool DynamicObject::emitDynamicSignal(char *signal, void **arguments)
{
QByteArray theSignal = QMetaObject::normalizedSignature(signal);
int signalId = metaObject()->indexOfSignal(theSignal);
if (signalId >= 0)
{
QMetaObject::activate(this, metaObject(), signalId, arguments);
return true;
}
return false;
}
myDynamicObject->emitDynamicSignal("nameChanged()", nullptr);
индекс сигнала найден, а signalId назначен на 5, но сигнал не срабатывает. Но если я сделаю, например,
myDynamicObject->setProperty("name", "Botanik");
свойство изменено и сигнал срабатывает успешно.
Что не так в моем коде? Что я должен передать в качестве параметра 'arguments' QMetaObject :: activ?
РЕДАКТИРОВАТЬ1:
Полный исходный код временно доступен здесь .