Drag and drop in QTreeWidget with custom class (Error :Qvariant::save)
Drag and drop in QTreeWidget with custom class (Error :Qvariant::save)
我的问题如下:
我想在我的 QTreeWidget 中使用拖放操作。我的 QtreeWidgetItem 具有以下标志 Enabled | selectable |Drag | Drop.
它适用于一个项目但不适用于其余项目(错误 Qvariant::Save 无效类型保存)
因为我们做了一些: setdata(QVariant::fromvalue<...
我明白因为我想使用自定义数据,我需要让 QVariant 理解我的 class,为此我需要我的 class 有一个默认构造函数,一个复制构造函数,一个析构函数和 2 个运算符霸主 << 和 >>.
friend QDataStream & operator << (QDataStream &arch, const MyClass & object)
在我需要 Q_DECLARE_METATYPE(MyClass)
并使用 :
注册我的操作员之后
qRegisterMetaTypeStreamOperators<MyClass>("MyClass")
但我无法让它工作。 (仍然错误 Qvariant::Save 要保存的类型无效)
我需要帮助才能了解一切进展。
我的重载运算符在我的 class (.H)
中定义
我的 Q_DECLARE_METATYPE 应该在我的 class 的末尾声明吗? (.h) 会不会有问题因为somme class 继承自它?还是因为它有纯粹的功能?
我知道很多人在 main 中使用 qRegisterMetaTypeStreamOperators 但我不能那样做,我可以在其他地方使用它吗(在我的 class 的构造函数中,否则这会导致问题(如多重声明或多次调用,例如连接功能))
错误永远不会改变,这是正常现象还是 Qt 应该告诉我 "it recognizes the class I want to save but it doesn't everything needed"?
好的,我回答了我的一些问题:
Q_DECLARE_METATYPE 不需要在 .H 中(现在使用我的 .cpp)
您可以在构造函数中使用 qRegisterMetaTypeStreamOperators (作为连接)
当 QT 重新识别你的 class 时,它会显示另一条消息(现在我的问题是我的 class 是一个抽象的 class)
我正在尝试让它与我当前的架构一起工作
MyClass (Abstract)
- MyClassTemplate : MyClass
-MyClassA : MyClassTemplate<MyClassA>
-MyClassB : MyClassTemplate<MyClassB>
好的,我知道了。
你可以使用一个简单的技巧。
创建一个结构,它有一个指向您要传递的 class 的指针,并且在 class 中有运算符 << 和 >>。
Q_Dclare_Metatype(你的结构)
不要忘记 qRegisterMetaTypeStreamOperators 你的结构
因为你的 class 元素永远不会被破坏,你可以毫无风险地传递一个指向它的指针,并且因为你声明了你将传递的类型,qt 接受它
(因为当我只是使用 void * 或其他指针类型时,qt reconisez 它具有特定类型并且不会工作。
希望对遇到同样问题的你有所帮助
我的问题如下:
我想在我的 QTreeWidget 中使用拖放操作。我的 QtreeWidgetItem 具有以下标志 Enabled | selectable |Drag | Drop.
它适用于一个项目但不适用于其余项目(错误 Qvariant::Save 无效类型保存)
因为我们做了一些: setdata(QVariant::fromvalue<...
我明白因为我想使用自定义数据,我需要让 QVariant 理解我的 class,为此我需要我的 class 有一个默认构造函数,一个复制构造函数,一个析构函数和 2 个运算符霸主 << 和 >>.
friend QDataStream & operator << (QDataStream &arch, const MyClass & object)
在我需要 Q_DECLARE_METATYPE(MyClass)
并使用 :
qRegisterMetaTypeStreamOperators<MyClass>("MyClass")
但我无法让它工作。 (仍然错误 Qvariant::Save 要保存的类型无效)
我需要帮助才能了解一切进展。 我的重载运算符在我的 class (.H)
中定义我的 Q_DECLARE_METATYPE 应该在我的 class 的末尾声明吗? (.h) 会不会有问题因为somme class 继承自它?还是因为它有纯粹的功能?
我知道很多人在 main 中使用 qRegisterMetaTypeStreamOperators 但我不能那样做,我可以在其他地方使用它吗(在我的 class 的构造函数中,否则这会导致问题(如多重声明或多次调用,例如连接功能))
错误永远不会改变,这是正常现象还是 Qt 应该告诉我 "it recognizes the class I want to save but it doesn't everything needed"?
好的,我回答了我的一些问题: Q_DECLARE_METATYPE 不需要在 .H 中(现在使用我的 .cpp) 您可以在构造函数中使用 qRegisterMetaTypeStreamOperators (作为连接) 当 QT 重新识别你的 class 时,它会显示另一条消息(现在我的问题是我的 class 是一个抽象的 class)
我正在尝试让它与我当前的架构一起工作
MyClass (Abstract)
- MyClassTemplate : MyClass
-MyClassA : MyClassTemplate<MyClassA>
-MyClassB : MyClassTemplate<MyClassB>
好的,我知道了。 你可以使用一个简单的技巧。 创建一个结构,它有一个指向您要传递的 class 的指针,并且在 class 中有运算符 << 和 >>。 Q_Dclare_Metatype(你的结构) 不要忘记 qRegisterMetaTypeStreamOperators 你的结构
因为你的 class 元素永远不会被破坏,你可以毫无风险地传递一个指向它的指针,并且因为你声明了你将传递的类型,qt 接受它 (因为当我只是使用 void * 或其他指针类型时,qt reconisez 它具有特定类型并且不会工作。
希望对遇到同样问题的你有所帮助