排序和显示自定义QVariant类型

时间:2010-05-03 19:37:33

标签: c++ qt

我有一个我想要与QVariant一起使用的自定义类型,但我不知道如何让QVariant显示在表中或让它在QSortFilterProxyModel中排序。

我使用Q_DECLARE_METATYPE注册了这个类型,并编写了通过qRegisterMetaTypeStreamOperators注册的流媒体操作符,但无论出于何种原因,当我使用带有表模型的类型时,它不会显示任何内容而且不会排序。

我应该指定无法修改此自定义类型。它有一个复制和默认构造函数,但我无法进入并修改源代码以使其与QVariant一起使用。有没有一种方法可以非侵入性地获得我想要的行为?

1 个答案:

答案 0 :(得分:4)

<强>显示

听起来你的模型没有为DisplayRole返回合理的内容。用于显示模型中所有内容的QAbstractItemDelegate(通常为QStyledItemDelegate)需要了解如何为Qt::DisplayRole呈现data()返回的内容。< / p>

您有两个主要选择:

  1. 修改您的模型,使其返回合理的Qt::DisplayRole或OR
  2. 对其中一个现有委托进行子类化并对其进行修改,以便它可以正确显示您的自定义变体类型。
  3. 如果您要编辑该类型的项目,则需要致电registerEditor,以便将自定义类型与编辑器相关联。请参阅QItemEditorFactory documentation

    <强>排序

    您不能依赖QVariant的比较运算符,因为它不适用于自定义类型,因此您需要实现QSortFilterProxyModel::lessThan以进行自定义排序。