Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision e8037987

Von Sebastian Diel vor mehr als 6 Jahren hinzugefügt

  • ID e803798742fae3046dd94cf8269e0fc85f3b6b4b
  • Vorgänger 18173f03
  • Nachfolger 827458ed

actually running, but still with the bug

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());
}
const QSharedPointer<Entity> EntityInstanceFactory::castQVariant(
QVariant &entity) {
return *static_cast<const QSharedPointer<Entity>*>(entity.constData());
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;
}
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