diff --git a/src/defines.h b/src/defines.h index 318f99b..17d1032 100644 --- a/src/defines.h +++ b/src/defines.h @@ -87,9 +87,9 @@ public: \ NUT_DECLARE_FIELD(keytype, name##Id, read##Id, write##Id) \ NUT_INFO(__nut_FOREIGN_KEY, name, type) \ Nut::Row m_##name; \ -public: \ +public slots: \ Nut::Row read() const { return m_##name ; } \ - void write(Nut::Row name){ \ + Q_INVOKABLE void write(Nut::Row name){ \ m_##name = name; \ } diff --git a/src/query.h b/src/query.h index b535df3..9b76e35 100644 --- a/src/query.h +++ b/src/query.h @@ -317,9 +317,20 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) for (int i = 0; i < data.masters.count(); ++i) { int master = data.masters[i]; - table->setProperty(data.masterFields[i].toLocal8Bit().data(), +#ifdef NUT_SHARED_POINTER + QString mName = QString("set%1").arg(levels[master].lastRow->metaObject()->className()); + QString type = QString("Nut::Row<%1>").arg(levels[master].lastRow->metaObject()->className()); + bool ok = table->metaObject()->invokeMethod(table, + mName.toLocal8Bit().data(), + QGenericArgument(type.toLatin1().data(), levels[master].lastRow)); +#else + bool ok = table->setProperty(data.masterFields[i].toLocal8Bit().data(), QVariant::fromValue(levels[master].lastRow)); +#endif + if (!ok) + qWarning("Unable to set property %s::%s", + table->metaObject()->className(), data.masterFields[i].toLocal8Bit().data()); table->setParentTableSet( levels[master].lastRow->childTableSet( data.table->className())); @@ -330,7 +341,7 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) table->clear(); //set last created row - data.lastRow = table; + data.lastRow = /*QSharedPointer*/(table); } //while } // while