我的问题如下:
我想在我的QTreeWidget中使用拖放功能。我的QtreeWidgetItem具有以下标志Enabled | selectable |Drag | Drop.
它适用于某个项目,但不适用于其他项目(错误Qvariant :: Save无效类型以保存)
这是因为我们做了一些: setdata(QVariant::fromvalue<...
我了解了,因为我想使用自定义数据,因此我需要让QVariant了解我的类,为此,我需要让我的类具有默认的构造函数,复制构造函数,析构函数和2个运算符霸主<<和> >。
friend QDataStream & operator << (QDataStream &arch, const MyClass & object)
在我需要Q_DECLARE_METATYPE(MyClass)
并向:注册我的运营商之后。
qRegisterMetaTypeStreamOperators<MyClass>("MyClass")
但是我无法正常工作。 (仍然是Error Qvariant :: Save无效类型以保存)
我需要帮助来了解一切。 我的重载运算符在类(.H)中定义
我的Q_DECLARE_METATYPE是否应在课程结束时声明? (.h)是否会因为somme类继承而出问题?还是因为它具有纯功能?
我知道很多人都在主要使用qRegisterMetaTypeStreamOperators,但是我不能这样做,我可以在其他地方使用它吗(在我的类的构造函数中,否则会引起问题(例如多次声明或多次调用,例如connect functiun) ))
错误永远不会改变,这是正常现象吗?还是Qt应该对我说“它识别出我要保存的类,但并不需要所有内容”?
好的,我回答了一些问题: Q_DECLARE_METATYPE不必位于.H中(现在可以与我的.cpp一起使用) 您可以在构造函数中使用qRegisterMetaTypeStreamOperators(作为连接) 当QT调整您的班级时,它将显示另一条消息(现在我的问题是我的班级是抽象班级)
我正在尝试使其与我当前的体系结构兼容
MyClass (Abstract)
- MyClassTemplate : MyClass
-MyClassA : MyClassTemplate<MyClassA>
-MyClassB : MyClassTemplate<MyClassB>
答案 0 :(得分:0)
好吧,我明白了。 您可以使用一个简单的技巧。 创建一个结构,该结构具有要传递的类的指针,并且在该类中具有运算符<<和>>。 Q_Dclare_Metatype(您的结构) 不要忘记为您的结构qRegisterMetaTypeStreamOperators
由于您的类元素从未被销毁,因此您可以毫无危险地传递一个指向它的指针,并且由于您声明了要传递的类型,因此qt接受它 (因为当我只是使用void *或其他指针类型时,qt会认为它具有特定的类型并且无法正常工作。
希望如果您遇到同样的问题也会对您有所帮助