我有 QListWidget 的日历 . 每个 QListWidgetItem 在逻辑上与 Calendar 的实例相关联,该实例属于应用程序的Model端 .
QListWidget
QListWidgetItem
Calendar
我可以使用 QListWidgetItem::setData 以指针的形式存储此关联吗?当我尝试这样做时,我收到以下错误:
QListWidgetItem::setData
错误:'QVariant :: QVariant(void *)'是私有的
我建议也要看一下这个解决方案,我认为这个解决方案非常优雅:(有一些小的语法错误,但你会很快发现它们,否则编译器会发出错误)
http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/
void *: QVariant::QVariant(int typeOrUserType, const void * copy) 还有另一个构造函数,您应该传递一个唯一的整数来表示指针类型 .
QVariant::QVariant(int typeOrUserType, const void * copy)
但正如文档所述,您可以使用 Q_DECLARE_METATYPE(Calendar*) 声明指针类型,并使用 QVariant::fromValue<Calendar*>(...) 和 QVariant::value<Calendar*>() 来存储和检索值 .
Q_DECLARE_METATYPE(Calendar*)
QVariant::fromValue<Calendar*>(...)
QVariant::value<Calendar*>()
或者,因为您使用 QListWidget 而不是常规模型,您可以只是子类 QListWidgetItem ,并添加带有所需访问器的 Calendar* 成员变量,以避免使用 QVariant 的开销 .
Calendar*
QVariant
2 回答
我建议也要看一下这个解决方案,我认为这个解决方案非常优雅:(有一些小的语法错误,但你会很快发现它们,否则编译器会发出错误)
http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/
void *:
QVariant::QVariant(int typeOrUserType, const void * copy)
还有另一个构造函数,您应该传递一个唯一的整数来表示指针类型 .但正如文档所述,您可以使用
Q_DECLARE_METATYPE(Calendar*)
声明指针类型,并使用QVariant::fromValue<Calendar*>(...)
和QVariant::value<Calendar*>()
来存储和检索值 .或者,因为您使用
QListWidget
而不是常规模型,您可以只是子类QListWidgetItem
,并添加带有所需访问器的Calendar*
成员变量,以避免使用QVariant
的开销 .