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; }