Qt 使用QListWidgetItem::setData存储指针

Qt 使用QListWidgetItem::setData存储指针,qt,qlistwidget,Qt,Qlistwidget,我有一个QListWidget日历。每个QListWidgetItem都与Calendar的一个实例逻辑关联,该实例属于应用程序的模型端 我可以使用QListWidgetItem::setData以指针的形式存储此关联吗?当我尝试执行此操作时,会出现以下错误: 错误:“QVariant::QVariant(void*)”是私有的 void*还有另一个构造函数:QVariant::QVariant(int-typeOrUserType,const-void*copy)其中应该传递一个唯一的整数来表

我有一个
QListWidget
日历。每个
QListWidgetItem
都与
Calendar
的一个实例逻辑关联,该实例属于应用程序的模型端

我可以使用
QListWidgetItem::setData
以指针的形式存储此关联吗?当我尝试执行此操作时,会出现以下错误:

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


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

但正如文档所述,您可以使用
Q\u declare\u元类型(Calendar*)
声明指针类型,并使用
QVariant::fromValue(…)
QVariant::value()
存储和检索值


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

的开销,我建议您也看看这个解决方案,我认为这很优雅: (有一些小的语法错误,但您会很快发现它们,或者编译器会发出错误)


+1,但不建议使用子类化路径。(如果QVariant转换是一个性能问题,那么使用基于项目的模型/视图就更重要了)。您提供的链接已失效。有这方面的信息吗?