Test::Test(QObject *parent) : QObject(parent), d(new TestPrivate) { QMetaObjectBuilder builder; builder.setClassName("Test"); d->catchedSignalId = builder.addSignal("catched(QString,QVariantList)").index(); d->meta = builder.toMetaObject(); QDataStream ostream(&d->metadata, QIODevice::WriteOnly); builder.serialize(ostream); }
bool Test::addSlot(const QString &slot) { if (d->slotId2Name.key(slot, -1) != -1) return false; QDataStream istream(d->metadata); QMetaObjectBuilder builder; QMap<QByteArray, const QMetaObject*> refs; builder.deserialize(istream, refs); int metaIndex = builder.addSlot(slot.toLocal8Bit()).index(); d->slotId2Name.insert(metaIndex + d->meta->methodOffset(), slot); if (d->meta) free(d->meta); d->meta = builder.toMetaObject(); QDataStream ostream(&d->metadata, QIODevice::WriteOnly); builder.serialize(ostream); return true; }
bool Test::addSignal(const QString &signal) { if (d->signalName2Id.value(signal, -1) != -1) return false; QDataStream istream(d->metadata); QMetaObjectBuilder builder; QMap<QByteArray, const QMetaObject*> refs; builder.deserialize(istream, refs); int metaIndex = builder.addSignal(signal.toLocal8Bit()).index() + d->meta->methodOffset(); d->signalName2Id.insert(signal, metaIndex); if (d->meta) free(d->meta); d->meta = builder.toMetaObject(); QDataStream ostream(&d->metadata, QIODevice::WriteOnly); builder.serialize(ostream); return true; }
bool Test::removeSlot(const QString &slot) { if (d->slotId2Name.key(slot, -1) == -1) return false; QDataStream istream(d->metadata); QMetaObjectBuilder builder; QMap<QByteArray, const QMetaObject*> refs; builder.deserialize(istream, refs); int metaIndex = d->slotId2Name.key(slot); builder.removeMethod(metaIndex - d->meta->methodOffset()); d->slotId2Name.remove(metaIndex); if (d->meta) free(d->meta); d->meta = builder.toMetaObject(); QDataStream ostream(&d->metadata, QIODevice::WriteOnly); builder.serialize(ostream); return true; }
bool Test::removeSignal(const QString &signal) { if (d->signalName2Id.value(signal, -1) == -1) return false; QDataStream istream(d->metadata); QMetaObjectBuilder builder; QMap<QByteArray, const QMetaObject*> refs; builder.deserialize(istream, refs); int metaIndex = d->signalName2Id.value(signal) - d->meta->methodOffset(); d->signalName2Id.remove(signal); builder.removeMethod(metaIndex); if (d->meta) free(d->meta); d->meta = builder.toMetaObject(); QDataStream ostream(&d->metadata, QIODevice::WriteOnly); builder.serialize(ostream); return true; }