使用QListWidgetItem :: setData存储指针

时间:2012-02-12 10:14:25

标签: qt qlistwidget

我有QListWidget个日历。每个QListWidgetItem在逻辑上与Calendar的实例相关联,QListWidgetItem::setData是属于应用程序模型端的类。

我可以使用{{1}}以指针的形式存储此关联吗?当我尝试这样做时,我收到以下错误:

  

错误:'QVariant :: QVariant(void *)'是私有的

2 个答案:

答案 0 :(得分:26)

void *:QVariant::QVariant(int typeOrUserType, const void * copy)还有另一个构造函数,你应该传递一个唯一的整数来表示指针类型。

但正如文档中所述,您可以使用Q_DECLARE_METATYPE(Calendar*)声明指针类型,并使用QVariant::fromValue<Calendar*>(...)QVariant::value<Calendar*>()来存储和检索值。

或者,因为您使用的是QListWidget而不是常规模型,您可以将QListWidgetItem子类化,并添加具有所需访问者的Calendar*成员变量,以避免使用QVariant的开销。

答案 1 :(得分:0)

我建议也要考虑这个解决方案,我觉得这个解决方案非常优雅: (有一些小的语法错误,但你会很快发现它们,否则编译器会发出错误)

http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/