Сохранить QList<QSharedPointer <MyClass >> как QVariant

У меня проблема с сохранением QList QSharedPointer как QVariant в производном классе QGraphicsItem. MyClass - это абстрактный базовый класс, используемый в качестве интерфейса. Я сделал это, чтобы иметь возможность привести все "подклассы MyClass" к базовому MyClass и поместить их все в один контейнер (список, карта и т. Д.).

Консольный вывод:

kernel \ qvariant.cpp (2150): QVariant:: save: невозможно сохранить тип <'QList >' (идентификатор типа: 1035).

global \ qglobal.cpp (3052): сбой ASSERT в QVariant::save: "Недопустимый тип для сохранения", файл ядра \qvariant.cpp, строка 2151

Абстрактный код:

SampleClass::SampleClass()
{
    qRegisterMetaType<QSharedPointer<MyClass> >("QSharedPointer<MyClass>");
    qRegisterMetaType<QList<QSharedPointer<MyClass>>>("QList<QSharedPointer<MyClass>>");

    QList<QSharedPointer<MyClass> > myClassList;
    myClassList.append(...); // Just to make clear that the list is filled with QSharedPointer<MyClass>
    QVariant varMyClass;
    varMyClass.setValue(myClassList); //QVariant::fromValue(myClassList)

    DerivedQGraphicsItem *newCustomItem = new DerivedQGraphicsItem;
    newCustomItem->setData(Qt::UserRole, varMyClass);
}

Это работает нормально, но когда я добавляю newCustomItem в QGraphicsScene и щелкаю по нему, появляется ошибка выше. Похоже, что операторы потока должны быть реализованы (QDataStream &operator<< и QDataStream &operator>>) для QSharedPointer. Но возможно ли это и имеет ли это смысл?

0 ответов

Другие вопросы по тегам