>我的问题是以下几点: 我想在我的QTreeWidget中使用拖放。My QtreeWidgetItem 具有以下标志Enabled | selectable |Drag | Drop.
它适用于一个项目,但不适用于其余项目(错误 Qvariant::保存要保存的无效类型)
这是因为我们做了一些: setdata(QVariant::fromvalue<...
我明白,因为我想使用自定义数据,我需要让 QVariant 理解我的类,为此我需要我的类有一个默认构造函数、一个复制构造函数、一个析构函数和 2 个运算符霸主<<和>>。
friend QDataStream & operator << (QDataStream &arch, const MyClass & object)
在我需要Q_DECLARE_METATYPE(MyClass)
并注册我的运算符后:
qRegisterMetaTypeStreamOperators<MyClass>("MyClass")
但我无法让它工作。(仍然错误Qvariant::保存无效类型以保存)
我需要帮助来了解一切的去向。 我的重载运算符在我的类 (.H)
我的Q_DECLARE_METATYPE应该在课程结束时宣布吗?(.h) 会不会有问题,因为索姆类继承自它?还是因为它具有纯粹的功能?
我知道很多人主要使用 qRegisterMetaTypeStreamOperators 但我不能这样做,我可以在其他地方使用它吗(在我的类的一个构造函数中,否则这会导致问题(如多个声明或多个调用,如连接函数))
错误永远不会改变,这是正常的还是Qt应该对我说"它识别出我想保存的类,但它不需要的一切"?
好的,我回答了我的一些问题: Q_DECLARE_METATYPE不需要在 .H(现在与我的.cpp一起工作) 您可以在构造函数中使用 qRegisterMetaTypeStreamOperators (作为连接) 当QT协调你的类时,它会显示另一条消息(现在我的问题是我的类是一个抽象类)
我正在尝试使其与我当前的架构一起使用
MyClass (Abstract)
- MyClassTemplate : MyClass
-MyClassA : MyClassTemplate<MyClassA>
-MyClassB : MyClassTemplate<MyClassB>
好的,我知道了。 您可以使用一个简单的技巧。 创建一个结构,该结构具有指向要传递的类的指针,并且该类中具有运算符<<和>>。 Q_Dclare_Metatype(您的结构) 不要忘记qRegisterMetaTypeStreamOperators your struct
由于你的类元素永远不会被销毁,你可以毫无风险地传递一个指向它的指针,并且由于你声明了你将传递的类型,qt接受它 (因为当我只是在 void * 或其他指针类型时,Qt 会调和它有一个特定的类型并且不起作用。
如果您有同样的问题,希望对您有所帮助