Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 47d95679

Von Christian Ehringfeld vor mehr als 6 Jahren hinzugefügt

bugfix

Unterschiede anzeigen:

src/entityinstancefactory.cpp
QHash<QByteArray, EntityInstanceFactory::Constructor>
EntityInstanceFactory::instance =
QHash<QByteArray, EntityInstanceFactory::Constructor>();
QHash<QByteArray, EntityInstanceFactory::Constructor>();
EntityInstanceFactory::EntityInstanceFactory() {
}
......
s.append("*");
}
auto ptr = EntityInstanceFactory::createInstance(QMetaType::type(
s.toUtf8().constData()));
s.toUtf8().constData()));
if (!ptr) {
s.remove("*");
ptr = EntityInstanceFactory::createObject(s.toUtf8());
......
if(!e) {
e = qobject_cast<Entity *>(metaObject->newInstance());
qDebug() << "Backup method for dynamic object creation was called. Maybe the class " +
QString(metaObject->className()) + " isn't registered?";
QString(metaObject->className()) + " isn't registered?";
}
} else {
void *newObj = QMetaType::create(metaTypeId);
......
}
Entity *EntityInstanceFactory::createInstance(const char *className,
const QHash<QString, QVariant> &attributes) {
const QHash<QString, QVariant> &attributes) {
Entity *e = EntityInstanceFactory::createInstance(className);
EntityInstanceFactory::setAttributes(e, attributes);
return e;
}
void EntityInstanceFactory::setAttributes(Entity *&e,
const QHash<QString, QVariant> &attributes,
QHash<QString, QMetaProperty> metaprops) {
const QHash<QString, QVariant> &attributes,
QHash<QString, QMetaProperty> metaprops) {
if (e) {
auto iterator = attributes.constBegin();
while (iterator != attributes.constEnd()) {
......
}
} else {
qWarning() << prop.name() << "on Entity" << EntityHelper::getClassname(
e) << "not writeable!";
e) << "not writeable!";
}
} else {
e->setProperty(iterator.key().toLatin1().data(), iterator.value());
......
}
void EntityInstanceFactory::setAttributes(Entity *&e,
const QHash<QString, QVariant> &attributes) {
const QHash<QString, QVariant> &attributes) {
if (!attributes.isEmpty()) {
auto metaprops = EntityHelper::getMetaProperties(e);
EntityInstanceFactory::setAttributes(e, attributes, metaprops);
......
}
QList<QSharedPointer<Entity>> EntityInstanceFactory::castQVariantList(
QVariant &list) {
QVariant &list) {
return *reinterpret_cast<QList<QSharedPointer<Entity>>*>(list.data());
}
QSharedPointer<Entity> EntityInstanceFactory::castQVariant(
QVariant &entity) {
auto e = entity.value<QSharedPointer<Entity>>();
if(!e) {
auto ne = *static_cast<QSharedPointer<QObject>*>(entity.data());
auto entityPtr = ne.objectCast<Entity>();
if(entityPtr) {
e = entityPtr;
}
}
return e;
const QSharedPointer<Entity> EntityInstanceFactory::castQVariant(
QVariant &entity) {
return *static_cast<const QSharedPointer<Entity>*>(entity.constData());
}
QStringList EntityInstanceFactory::getRegisteredClasses() {
QStringList registered = QStringList();
for (auto i = EntityInstanceFactory::instance.constBegin();
i != EntityInstanceFactory::instance.constEnd(); ++i) {
i != EntityInstanceFactory::instance.constEnd(); ++i) {
registered.append(i.key());
}
return registered;
......
Entity *EntityInstanceFactory::createInstance(Attribute *&attr) {
return EntityInstanceFactory::createInstance(
EntityInstanceFactory::extractEntityType(
attr->getMetaProperty().typeName()));
EntityInstanceFactory::extractEntityType(
attr->getMetaProperty().typeName()));
}

Auch abrufbar als: Unified diff