首页 文章

使用QListWidgetItem :: setData存储指针

提问于
浏览
10

我有 QListWidget 的日历 . 每个 QListWidgetItem 在逻辑上与 Calendar 的实例相关联,该实例属于应用程序的Model端 .

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

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

2 回答

  • 26

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

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

  • 0

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

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

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

相关问题