【问题标题】:Storing pointers using QListWidgetItem::setData使用 QListWidgetItem::setData 存储指针
【发布时间】:2012-02-12 10:14:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: qt qlistwidget


    【解决方案1】:

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

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

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

    【讨论】:

    • +1,虽然不会建议子类化路径。 (在 QVariant 转换是性能问题的情况下,使用基于项目的模型/视图将更是如此)。
    【解决方案2】:

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

    https://web.archive.org/web/20171025163314/http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/

    【讨论】:

    • 您提供的链接已失效。有这方面的信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2011-07-23
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多