保存QList <qsharedpointer <myclass>&gt;作为QVariant

时间:2017-07-07 13:00:07

标签: c++ qt qvariant qsharedpointer

我在保存QSharedPointer的QList时遇到问题&lt; MyClass&gt;作为派生的QGraphicsItem类中的QVariant。 MyClass是一个用作接口的抽象基类。我这样做是为了能够将所有'MyClass子类'转换为基础MyClass并将它们全部放入一个容器(列表,地图等)。

控制台输出:

  

kernel \ qvariant.cpp(2150):QVariant :: save:无法保存类型&lt;'QList&lt; QSharedPointer&LT; MyClass的&GT; &GT;” (输入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;。但它有可能并且这有意义吗?

0 个答案:

没有答案