我在保存QSharedPointer的QList时遇到问题< MyClass>作为派生的QGraphicsItem类中的QVariant。 MyClass是一个用作接口的抽象基类。我这样做是为了能够将所有'MyClass子类'转换为基础MyClass并将它们全部放入一个容器(列表,地图等)。
控制台输出:
kernel \ qvariant.cpp(2150):QVariant :: save:无法保存类型<'QList< QSharedPointer< MyClass的> >” (输入id:1035)。
global \ qglobal.cpp(3052):QVariant :: save中的ASSERT失败:“要保存的类型无效”,文件内核\ 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并单击它时,会发生上面的错误。对于QSharedPointer&lt;似乎必须实现流操作符(QDataStream&amp; operator&lt;&lt;和QDataStream&amp; operator&gt;&gt;)。 MyClass&gt;。但它有可能并且这有意义吗?